@itwin/core-frontend 3.2.1 → 3.2.4

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 (102) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/lib/cjs/DisplayStyleState.d.ts +68 -17
  3. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  4. package/lib/cjs/DisplayStyleState.js +66 -20
  5. package/lib/cjs/DisplayStyleState.js.map +1 -1
  6. package/lib/cjs/IModelApp.d.ts.map +1 -1
  7. package/lib/cjs/IModelApp.js +1 -1
  8. package/lib/cjs/IModelApp.js.map +1 -1
  9. package/lib/cjs/extension/ExtensionAdmin.d.ts +5 -2
  10. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -1
  11. package/lib/cjs/extension/ExtensionAdmin.js +24 -6
  12. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  13. package/lib/cjs/extension/providers/ExtensionServiceClient.d.ts +8 -6
  14. package/lib/cjs/extension/providers/ExtensionServiceClient.d.ts.map +1 -1
  15. package/lib/cjs/extension/providers/ExtensionServiceClient.js +13 -6
  16. package/lib/cjs/extension/providers/ExtensionServiceClient.js.map +1 -1
  17. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts +0 -2
  18. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  19. package/lib/cjs/extension/providers/RemoteExtensionProvider.js +9 -22
  20. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  21. package/lib/cjs/extension/providers/ServiceExtensionProvider.d.ts +4 -6
  22. package/lib/cjs/extension/providers/ServiceExtensionProvider.d.ts.map +1 -1
  23. package/lib/cjs/extension/providers/ServiceExtensionProvider.js +11 -22
  24. package/lib/cjs/extension/providers/ServiceExtensionProvider.js.map +1 -1
  25. package/lib/cjs/render/RenderSystem.d.ts +5 -0
  26. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  27. package/lib/cjs/render/RenderSystem.js.map +1 -1
  28. package/lib/cjs/render/webgl/ShaderProgram.js +1 -1
  29. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  30. package/lib/cjs/render/webgl/UniformHandle.d.ts +2 -1
  31. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  32. package/lib/cjs/render/webgl/UniformHandle.js +15 -3
  33. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  34. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  35. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -2
  36. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  37. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -0
  38. package/lib/cjs/tile/map/MapCartoRectangle.d.ts.map +1 -1
  39. package/lib/cjs/tile/map/MapCartoRectangle.js +1 -0
  40. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  41. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +2 -1
  42. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  43. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  44. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +2 -0
  45. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  46. package/lib/cjs/tile/map/MapLayerImageryProvider.js +23 -9
  47. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  48. package/lib/cjs/tile/map/MapLayerSources.d.ts +14 -9
  49. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  50. package/lib/cjs/tile/map/MapLayerSources.js +14 -6
  51. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  52. package/lib/esm/DisplayStyleState.d.ts +68 -17
  53. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  54. package/lib/esm/DisplayStyleState.js +66 -20
  55. package/lib/esm/DisplayStyleState.js.map +1 -1
  56. package/lib/esm/IModelApp.d.ts.map +1 -1
  57. package/lib/esm/IModelApp.js +2 -2
  58. package/lib/esm/IModelApp.js.map +1 -1
  59. package/lib/esm/extension/ExtensionAdmin.d.ts +5 -2
  60. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -1
  61. package/lib/esm/extension/ExtensionAdmin.js +24 -6
  62. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  63. package/lib/esm/extension/providers/ExtensionServiceClient.d.ts +8 -6
  64. package/lib/esm/extension/providers/ExtensionServiceClient.d.ts.map +1 -1
  65. package/lib/esm/extension/providers/ExtensionServiceClient.js +13 -6
  66. package/lib/esm/extension/providers/ExtensionServiceClient.js.map +1 -1
  67. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts +0 -2
  68. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  69. package/lib/esm/extension/providers/RemoteExtensionProvider.js +9 -22
  70. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  71. package/lib/esm/extension/providers/ServiceExtensionProvider.d.ts +4 -6
  72. package/lib/esm/extension/providers/ServiceExtensionProvider.d.ts.map +1 -1
  73. package/lib/esm/extension/providers/ServiceExtensionProvider.js +11 -22
  74. package/lib/esm/extension/providers/ServiceExtensionProvider.js.map +1 -1
  75. package/lib/esm/render/RenderSystem.d.ts +5 -0
  76. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  77. package/lib/esm/render/RenderSystem.js.map +1 -1
  78. package/lib/esm/render/webgl/ShaderProgram.js +1 -1
  79. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  80. package/lib/esm/render/webgl/UniformHandle.d.ts +2 -1
  81. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  82. package/lib/esm/render/webgl/UniformHandle.js +15 -3
  83. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  84. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  85. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -2
  86. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  87. package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -0
  88. package/lib/esm/tile/map/MapCartoRectangle.d.ts.map +1 -1
  89. package/lib/esm/tile/map/MapCartoRectangle.js +1 -0
  90. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  91. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +2 -1
  92. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  93. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  94. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +2 -0
  95. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  96. package/lib/esm/tile/map/MapLayerImageryProvider.js +24 -10
  97. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  98. package/lib/esm/tile/map/MapLayerSources.d.ts +14 -9
  99. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  100. package/lib/esm/tile/map/MapLayerSources.js +14 -6
  101. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  102. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderProgram.js","sourceRoot":"","sources":["../../../../src/render/webgl/ShaderProgram.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { DebugShaderFile } from \"../RenderSystem\";\r\nimport { AttributeDetails } from \"./AttributeMap\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawParams, ShaderProgramParams } from \"./DrawCommand\";\r\nimport { GL } from \"./GL\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueFlags } from \"./TechniqueFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Flags which control some conditional branches in shader code\r\n * @internal\r\n */\r\nexport const enum ShaderFlags {\r\n None = 0,\r\n Monochrome = 1 << 0,\r\n NonUniformColor = 1 << 1,\r\n OITFlatAlphaWeight = 1 << 2,\r\n OITScaleOutput = 1 << 3,\r\n IgnoreNonLocatable = 1 << 4,\r\n}\r\n\r\n/** Describes the location of a uniform variable within a shader program.\r\n * @internal\r\n */\r\nexport class Uniform {\r\n private readonly _name: string;\r\n protected _handle?: UniformHandle;\r\n\r\n protected constructor(name: string) { this._name = name; }\r\n\r\n public compile(prog: ShaderProgram): boolean {\r\n assert(!this.isValid);\r\n if (undefined !== prog.glProgram) {\r\n this._handle = UniformHandle.create(prog.glProgram, this._name);\r\n }\r\n\r\n return this.isValid;\r\n }\r\n\r\n public get isValid(): boolean { return undefined !== this._handle; }\r\n}\r\n\r\n/**\r\n * A function associated with a ProgramUniform which is invoked each time the shader program becomes active.\r\n * The function is responsible for setting the value of the uniform.\r\n * @internal\r\n */\r\nexport type BindProgramUniform = (uniform: UniformHandle, params: ShaderProgramParams) => void;\r\n\r\n/**\r\n * Describes the location of a uniform variable within a shader program, the value of which does not change while the program is active.\r\n * The supplied binding function will be invoked once each time the shader becomes active to set the value of the uniform.\r\n * @internal\r\n */\r\nexport class ProgramUniform extends Uniform {\r\n private readonly _bind: BindProgramUniform;\r\n\r\n public constructor(name: string, bind: BindProgramUniform) {\r\n super(name);\r\n this._bind = bind;\r\n }\r\n\r\n public bind(params: ShaderProgramParams): void {\r\n if (undefined !== this._handle) {\r\n this._bind(this._handle, params);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * A function associated with a GraphicUniform which is invoked each time a new graphic primitive is rendered using the associated shader.\r\n * The function is responsible for setting the value of the uniform.\r\n * @internal\r\n */\r\nexport type BindGraphicUniform = (uniform: UniformHandle, params: DrawParams) => void;\r\n\r\n/**\r\n * Describes the location of a uniform variable within a shader program, the value of which is dependent upon the graphic primitive\r\n * currently being rendered by the program. The supplied binding function will be invoked once for each graphic primitive submitted\r\n * to the program to set the value of the uniform.\r\n * @internal\r\n */\r\nexport class GraphicUniform extends Uniform {\r\n private readonly _bind: BindGraphicUniform;\r\n\r\n public constructor(name: string, bind: BindGraphicUniform) {\r\n super(name);\r\n this._bind = bind;\r\n }\r\n\r\n public bind(params: DrawParams): void {\r\n if (undefined !== this._handle) {\r\n this._bind(this._handle, params);\r\n }\r\n }\r\n}\r\n\r\n/** Describes the compilation status of a shader program. Programs may be compiled during idle time, or upon first use.\r\n * @internal\r\n */\r\nexport const enum CompileStatus {\r\n Success, // The program was successfully compiled.\r\n Failure, // The program failed to compile.\r\n Uncompiled, // No attempt has yet been made to compile the program.\r\n}\r\n\r\n/** @internal */\r\nexport class ShaderProgram implements WebGLDisposable {\r\n public vertSource: string;\r\n public fragSource: string;\r\n private _glProgram?: WebGLProgram;\r\n private _inUse: boolean = false;\r\n private _status: CompileStatus = CompileStatus.Uncompiled;\r\n private readonly _programUniforms = new Array<ProgramUniform>();\r\n private readonly _graphicUniforms = new Array<GraphicUniform>();\r\n private readonly _attrMap?: Map<string, AttributeDetails>;\r\n // for debugging purposes...\r\n public readonly description: string;\r\n private _fragDescription: string;\r\n private _vertGNdx: number = -1;\r\n private _fragGNdx: number = -1;\r\n private _vertHNdx: number = -1;\r\n private _fragHNdx: number = -1;\r\n public readonly outputsToPick;\r\n\r\n public constructor(gl: WebGLContext, vertSource: string, fragSource: string, attrMap: Map<string, AttributeDetails> | undefined, description: string, fragDescription: string) {\r\n this.description = description;\r\n this.outputsToPick = description.includes(\"Overrides\") || description.includes(\"Pick\");\r\n this._fragDescription = fragDescription;\r\n this.vertSource = vertSource;\r\n this.fragSource = fragSource;\r\n this._attrMap = attrMap;\r\n\r\n const glProgram = gl.createProgram();\r\n this._glProgram = (null === glProgram) ? undefined : glProgram;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._glProgram === undefined; }\r\n\r\n public dispose(): void {\r\n if (!this.isDisposed) {\r\n assert(!this._inUse);\r\n System.instance.context.deleteProgram(this._glProgram!);\r\n this._glProgram = undefined;\r\n this._status = CompileStatus.Uncompiled;\r\n }\r\n }\r\n\r\n public get glProgram(): WebGLProgram | undefined { return this._glProgram; }\r\n public get isUncompiled() { return CompileStatus.Uncompiled === this._status; }\r\n public get isCompiled() { return CompileStatus.Success === this._status; }\r\n\r\n private compileShader(type: GL.ShaderType): WebGLShader | undefined {\r\n const gl = System.instance.context;\r\n\r\n const shader = gl.createShader(type);\r\n if (null === shader)\r\n return undefined;\r\n\r\n const src = GL.ShaderType.Vertex === type ? this.vertSource : this.fragSource;\r\n gl.shaderSource(shader, src);\r\n gl.compileShader(shader);\r\n const succeeded = gl.getShaderParameter(shader, GL.ShaderParameter.CompileStatus) as boolean;\r\n if (!succeeded) {\r\n const compileLog = `${GL.ShaderType.Vertex === type ? \"Vertex\" : \"Fragment\"} shader failed to compile. Errors: ${gl.getShaderInfoLog(shader)} Program description: ${this.description}`;\r\n throw new Error(compileLog);\r\n }\r\n\r\n if (System.instance.options.debugShaders) {\r\n const isVS = GL.ShaderType.Vertex === type;\r\n const desc = isVS ? this.description : this._fragDescription;\r\n this.saveShaderCode(isVS, desc, src, shader);\r\n }\r\n\r\n return shader;\r\n }\r\n\r\n private linkProgram(vert: WebGLShader, frag: WebGLShader): boolean {\r\n assert(undefined !== this.glProgram);\r\n if (undefined === this._glProgram || null === this._glProgram) // because WebGL APIs used Thing|null, not Thing|undefined...\r\n return false;\r\n\r\n const gl = System.instance.context;\r\n gl.attachShader(this._glProgram, vert);\r\n gl.attachShader(this._glProgram, frag);\r\n\r\n // bind attribute locations before final linking\r\n if (this._attrMap !== undefined) {\r\n this._attrMap.forEach((attr: AttributeDetails, key: string) => {\r\n gl.bindAttribLocation(this._glProgram!, attr.location, key);\r\n });\r\n }\r\n\r\n gl.linkProgram(this._glProgram);\r\n\r\n const linkLog = gl.getProgramInfoLog(this._glProgram);\r\n gl.validateProgram(this._glProgram);\r\n\r\n const succeeded = gl.getProgramParameter(this._glProgram, GL.ProgramParameter.LinkStatus) as boolean;\r\n if (!succeeded) {\r\n const validateLog = gl.getProgramInfoLog(this._glProgram);\r\n const msg = `Shader program failed to link. Link errors: ${linkLog} Validation errors: ${validateLog} Program description: ${this.description}`;\r\n throw new Error(msg);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public compile(forUse: boolean = false): CompileStatus {\r\n if (System.instance.options.debugShaders && forUse && this._status === CompileStatus.Success)\r\n this.setDebugShaderUsage();\r\n\r\n switch (this._status) {\r\n case CompileStatus.Failure: return CompileStatus.Failure;\r\n case CompileStatus.Success: return CompileStatus.Success;\r\n default: {\r\n if (this.isDisposed) {\r\n this._status = CompileStatus.Failure;\r\n return CompileStatus.Failure;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n this._status = CompileStatus.Failure;\r\n\r\n const vert = this.compileShader(GL.ShaderType.Vertex);\r\n const frag = this.compileShader(GL.ShaderType.Fragment);\r\n if (undefined !== vert && undefined !== frag)\r\n if (this.linkProgram(vert, frag) && this.compileUniforms(this._programUniforms) && this.compileUniforms(this._graphicUniforms))\r\n this._status = CompileStatus.Success;\r\n\r\n if (System.instance.options.debugShaders && forUse && this._status === CompileStatus.Success)\r\n this.setDebugShaderUsage();\r\n\r\n if (true !== System.instance.options.preserveShaderSourceCode)\r\n this.vertSource = this.fragSource = \"\";\r\n\r\n return this._status;\r\n }\r\n\r\n public use(params: ShaderProgramParams): boolean {\r\n if (this.compile(true) !== CompileStatus.Success)\r\n return false;\r\n\r\n assert(undefined !== this._glProgram);\r\n if (null === this._glProgram || undefined === this._glProgram)\r\n return false;\r\n\r\n assert(!this._inUse);\r\n this._inUse = true;\r\n params.context.useProgram(this._glProgram);\r\n\r\n for (const uniform of this._programUniforms)\r\n uniform.bind(params);\r\n\r\n return true;\r\n }\r\n\r\n public endUse() {\r\n this._inUse = false;\r\n System.instance.context.useProgram(null);\r\n }\r\n\r\n public draw(params: DrawParams): void {\r\n assert(this._inUse);\r\n for (const uniform of this._graphicUniforms)\r\n uniform.bind(params);\r\n\r\n params.geometry.draw();\r\n }\r\n\r\n public addProgramUniform(name: string, binding: BindProgramUniform) {\r\n assert(this.isUncompiled);\r\n this._programUniforms.push(new ProgramUniform(name, binding));\r\n }\r\n\r\n public addGraphicUniform(name: string, binding: BindGraphicUniform) {\r\n assert(this.isUncompiled);\r\n this._graphicUniforms.push(new GraphicUniform(name, binding));\r\n }\r\n\r\n private compileUniforms<T extends Uniform>(uniforms: T[]): boolean {\r\n for (const uniform of uniforms) {\r\n if (!uniform.compile(this))\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private setDebugShaderUsage() {\r\n if (!System.instance.options.debugShaders)\r\n return;\r\n\r\n const shaderFiles = System.instance.debugShaderFiles;\r\n if (this._vertGNdx >= 0)\r\n shaderFiles[this._vertGNdx].isUsed = true;\r\n\r\n if (this._fragGNdx >= 0)\r\n shaderFiles[this._fragGNdx].isUsed = true;\r\n\r\n if (this._vertHNdx >= 0)\r\n shaderFiles[this._vertHNdx].isUsed = true;\r\n\r\n if (this._fragHNdx >= 0)\r\n shaderFiles[this._fragHNdx].isUsed = true;\r\n }\r\n\r\n private saveShaderCode(isVS: boolean, desc: string, src: string, shader: WebGLShader) {\r\n // save glsl and hlsl (from Angle and fixed up) in DebugShaderFile\r\n if (!System.instance.options.debugShaders)\r\n return;\r\n\r\n const shaderFiles = System.instance.debugShaderFiles;\r\n let sname: string;\r\n if (desc) {\r\n sname = desc.split(isVS ? \"//!V! \" : \"//!F! \").join(\"\");\r\n sname = sname.split(\": \").join(\"-\");\r\n sname = sname.split(\"; \").join(\"-\");\r\n } else {\r\n // need to investigate shaders with no comments to derive names, for now come up with unique name\r\n sname = `noname-${shaderFiles.length}`;\r\n }\r\n\r\n sname += isVS ? \"_VS\" : \"_FS\";\r\n const fname = `${sname}.glsl`;\r\n let dsfNdx = shaderFiles.push(new DebugShaderFile(fname, src, isVS, true, false));\r\n if (isVS)\r\n this._vertGNdx = dsfNdx - 1;\r\n else\r\n this._fragGNdx = dsfNdx - 1;\r\n\r\n const ext2 = System.instance.context.getExtension(\"WEBGL_debug_shaders\");\r\n if (!ext2)\r\n return;\r\n\r\n const srcH = ext2.getTranslatedShaderSource(shader);\r\n if (!srcH)\r\n return;\r\n\r\n // TODO: implement WebGL2 specific inputs for gl_VertexID and gl_InstanceID if ever used\r\n\r\n // parse and edit srcH to make it compilable\r\n const fnameH = `${sname}.hlsl`;\r\n let numTargets = 0; // for gl_Color cases\r\n let haveGLpos = false;\r\n let haveGLpntsz = false;\r\n let haveGLDepth = false;\r\n let haveGLFrontFacing = false;\r\n let haveGLPointCoord = false;\r\n let haveGLFragCoord = false;\r\n let haveGLFragColorOnly = false; // for only 1 output\r\n const haveGLFragColor = [false, false, false, false, false, false, false, false];\r\n const attrs: string[] = new Array<string>();\r\n const varyings: string[] = new Array<string>();\r\n const lines = srcH.split(\"\\n\");\r\n let toss = true;\r\n for (let ndx = 0; ndx < lines.length;) {\r\n let line = lines[ndx];\r\n if (line.indexOf(\"// INITIAL HLSL END\") >= 0)\r\n toss = true;\r\n\r\n if (toss)\r\n lines.splice(ndx, 1);\r\n\r\n if (line.indexOf(\"// INITIAL HLSL BEGIN\") >= 0) {\r\n toss = false;\r\n } else if (!toss) { // look for lines that need editing\r\n if (line.indexOf(\"Varyings\") >= 0) { // save off varyings in either case\r\n while (ndx + 1 < lines.length && lines[ndx + 1].indexOf(\"static\") >= 0) {\r\n ++ndx;\r\n line = lines[ndx].substring(6).trimLeft();\r\n varyings.push(line.substring(0, line.indexOf(\"=\")));\r\n }\r\n }\r\n\r\n if (isVS) {\r\n if (line.indexOf(\"Attributes\") >= 0) { // save off attributes\r\n while (ndx + 1 < lines.length && lines[ndx + 1].indexOf(\"static\") >= 0) {\r\n ++ndx;\r\n line = lines[ndx].substring(6).trimLeft();\r\n attrs.push(line.substring(0, line.indexOf(\"=\")));\r\n }\r\n } else if (line.indexOf(\"static float4 gl_Position\") >= 0) {\r\n haveGLpos = true;\r\n } else if (line.indexOf(\"static float gl_PointSize\") >= 0) {\r\n haveGLpntsz = true;\r\n } else if (line.indexOf(\"@@ VERTEX ATTRIBUTES @@\") >= 0) {\r\n lines[ndx] = \"// @@ VERTEX ATTRIBUTES @@\";\r\n } else if (line.indexOf(\"@@ MAIN PROLOGUE @@\") >= 0) {\r\n lines[ndx] = \"// @@ MAIN PROLOGUE @@\\ngetInput(input);\";\r\n } else if (line.indexOf(\"@@ VERTEX OUTPUT @@\") >= 0) {\r\n // have to create a VS_OUTPUT struct and a generateOutput function from varyings\r\n lines[ndx] = \"// @@ VERTEX OUTPUT @@\\nstruct VS_INPUT\\n {\";\r\n let aNdx = 0;\r\n for (const tstr of attrs) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${tstr}: TEXCOORD${aNdx};`);\r\n ++aNdx;\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nvoid getInput(VS_INPUT input) {\");\r\n for (const tstr of attrs) {\r\n let t = tstr.indexOf(\"_a\");\r\n let vName = tstr.substring(t);\r\n t = vName.indexOf(\" \");\r\n vName = vName.substring(0, t);\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${vName} = input.${vName};`);\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \"}\\nstruct VS_OUTPUT\\n {\");\r\n if (haveGLpos) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float4 _v_position : SV_Position;\");\r\n }\r\n\r\n if (haveGLpntsz) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float gl_PointSize : PointSize;\");\r\n }\r\n\r\n let vNdx = 0;\r\n for (const tstr of varyings) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${tstr}: TEXCOORD${vNdx};`);\r\n ++vNdx;\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nVS_OUTPUT generateOutput(VS_INPUT input) {\\n VS_OUTPUT output;\");\r\n if (haveGLpos) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output._v_position = gl_Position;\");\r\n }\r\n\r\n if (haveGLpntsz) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output.gl_PointSize = gl_PointSize;\");\r\n }\r\n\r\n for (const tstr of varyings) {\r\n let t = tstr.indexOf(\"_v\");\r\n let vName = tstr.substring(t);\r\n t = vName.indexOf(\" \");\r\n vName = vName.substring(0, t);\r\n ++ndx;\r\n lines.splice(ndx, 0, ` output.${vName} = ${vName};`);\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" return output;\\n}\");\r\n }\r\n } else { // fragment shader\r\n let tNdx = 0;\r\n if (line.indexOf(\"static float4 gl_Color[\") >= 0) {\r\n //\r\n } else if (line.indexOf(\"gl_Color[0] =\") >= 0) {\r\n if (numTargets < 1)\r\n numTargets = 1;\r\n } else if (line.indexOf(\"gl_Color[1] =\") >= 0) {\r\n if (numTargets < 2)\r\n numTargets = 2;\r\n } else if (line.indexOf(\"gl_Color[2] =\") >= 0) {\r\n if (numTargets < 3)\r\n numTargets = 3;\r\n } else if (line.indexOf(\"gl_Color[3] =\") >= 0) {\r\n numTargets = 4;\r\n } else if (line.indexOf(\"gl_Depth\") >= 0) {\r\n haveGLDepth = true;\r\n } else if (line.indexOf(\"gl_FrontFacing\") >= 0) {\r\n haveGLFrontFacing = true;\r\n } else if (line.indexOf(\"gl_PointCoord\") >= 0) {\r\n haveGLPointCoord = true;\r\n } else if (line.indexOf(\"gl_FragCoord\") >= 0) {\r\n haveGLFragCoord = true;\r\n } else if ((tNdx = line.indexOf(\"out_FragColor\")) >= 0) {\r\n const c = line.substr(tNdx + 13, 1);\r\n if (c === \" \" || c === \"=\")\r\n haveGLFragColorOnly = true;\r\n else {\r\n tNdx = +c;\r\n haveGLFragColor[tNdx] = true;\r\n }\r\n } else if (line.indexOf(\"@@ PIXEL OUTPUT @@\") >= 0) {\r\n // have to create a VS_OUTPUT struct, a getInputs function (both from varyings),\r\n // a PS_OUTPUT struct, and a generateOutput function (both based on numTargets or haveGLFragColor)\r\n lines[ndx] = \"// @@ PIXEL OUTPUT @@\\nstruct VS_OUTPUT\\n {\";\r\n if (haveGLFragCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float4 gl_FragCoord : SV_POSITION;\");\r\n }\r\n\r\n let vNdx = 0;\r\n for (const tstr of varyings) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${tstr}: TEXCOORD${vNdx};`);\r\n ++vNdx;\r\n }\r\n\r\n if (haveGLFrontFacing) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" bool gl_FrontFacing : SV_IsFrontFace;\");\r\n }\r\n\r\n if (haveGLPointCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float2 gl_PointCoord : PointCoord;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nvoid getInputs(VS_OUTPUT input) {\");\r\n if (haveGLFragCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" gl_FragCoord = input.gl_FragCoord;\");\r\n }\r\n\r\n for (const tstr of varyings) {\r\n let t = tstr.indexOf(\"_v\");\r\n let vName = tstr.substring(t);\r\n t = vName.indexOf(\" \");\r\n vName = vName.substring(0, t);\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${vName} = input.${vName};`);\r\n }\r\n\r\n if (haveGLFrontFacing) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" gl_FrontFacing = input.gl_FrontFacing;\");\r\n }\r\n\r\n if (haveGLPointCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" gl_PointCoord = input.gl_PointCoord;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \"}\\nstruct PS_OUTPUT\\n {\");\r\n let cNdx = 0;\r\n while (cNdx < numTargets) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` float4 col${cNdx} : SV_TARGET${cNdx};`);\r\n ++cNdx;\r\n }\r\n\r\n if (haveGLFragColorOnly) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float4 out_FragColor : SV_TARGET;\");\r\n } else {\r\n for (cNdx = 0; cNdx < haveGLFragColor.length; ++cNdx) {\r\n if (haveGLFragColor[cNdx]) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` float4 out_FragColor${cNdx} : SV_TARGET${cNdx};`);\r\n }\r\n }\r\n }\r\n\r\n if (haveGLDepth) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float gl_Depth : SV_Depth;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nPS_OUTPUT generateOutput () {\\n PS_OUTPUT output;\");\r\n cNdx = 0;\r\n while (cNdx < numTargets) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` output.col${cNdx} = gl_Color[${cNdx}];`);\r\n ++cNdx;\r\n }\r\n\r\n if (haveGLFragColorOnly) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output.out_FragColor = out_FragColor;\");\r\n } else {\r\n for (cNdx = 0; cNdx < haveGLFragColor.length; ++cNdx) {\r\n if (haveGLFragColor[cNdx]) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` output.out_FragColor${cNdx} = out_FragColor${cNdx};`);\r\n }\r\n }\r\n }\r\n\r\n if (haveGLDepth) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output.gl_Depth = gl_Depth;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" return output;\\n}\");\r\n } else if (line.indexOf(\"PS_OUTPUT main\") >= 0) {\r\n lines[ndx] = `// ${line}\\nPS_OUTPUT main(VS_OUTPUT input){`;\r\n } else if (line.indexOf(\"@@ MAIN PROLOGUE @@\") >= 0) {\r\n lines[ndx] = `// ${line}\\ngetInputs(input);`;\r\n }\r\n }\r\n\r\n ++ndx;\r\n }\r\n }\r\n\r\n const srcH2 = lines.join(\"\\n\");\r\n dsfNdx = shaderFiles.push(new DebugShaderFile(fnameH, srcH2, isVS, false, false));\r\n if (isVS)\r\n this._vertHNdx = dsfNdx - 1;\r\n else\r\n this._fragHNdx = dsfNdx - 1;\r\n }\r\n}\r\n\r\n/** Context in which ShaderPrograms are executed. Avoids switching shaders unnecessarily.\r\n * Ensures shader programs are compiled before use and un-bound when scope is disposed.\r\n * This class must *only* be used inside a using() function!\r\n * @internal\r\n */\r\nexport class ShaderProgramExecutor {\r\n private _program?: ShaderProgram;\r\n private static _params?: ShaderProgramParams;\r\n\r\n public constructor(target: Target, pass: RenderPass, program?: ShaderProgram) {\r\n this.params.init(target, pass);\r\n this.changeProgram(program);\r\n }\r\n\r\n public static freeParams(): void {\r\n this._params = undefined;\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n\r\n /** Clears the current program to be executed. This does not free WebGL resources, since those are owned by Techniques. */\r\n public dispose() {\r\n this.changeProgram(undefined);\r\n ShaderProgramExecutor.freeParams();\r\n this._isDisposed = true;\r\n }\r\n\r\n public setProgram(program: ShaderProgram): boolean { return this.changeProgram(program); }\r\n public get isValid() { return undefined !== this._program; }\r\n public get target() { return this.params.target; }\r\n public get renderPass() { return this.params.renderPass; }\r\n public get params() {\r\n if (undefined === ShaderProgramExecutor._params)\r\n ShaderProgramExecutor._params = new ShaderProgramParams();\r\n\r\n return ShaderProgramExecutor._params;\r\n }\r\n\r\n public draw(params: DrawParams) {\r\n assert(this.isValid);\r\n if (undefined !== this._program) {\r\n this._program.draw(params);\r\n }\r\n }\r\n public drawInterrupt(params: DrawParams) {\r\n assert(params.target === this.params.target);\r\n\r\n const tech = params.target.techniques.getTechnique(params.geometry.techniqueId);\r\n const program = tech.getShader(TechniqueFlags.defaults);\r\n if (this.setProgram(program)) {\r\n this.draw(params);\r\n }\r\n }\r\n\r\n public pushBranch(branch: Branch): void { this.target.pushBranch(branch); }\r\n public popBranch(): void { this.target.popBranch(); }\r\n public pushBatch(batch: Batch): void { this.target.pushBatch(batch); }\r\n public popBatch(): void { this.target.popBatch(); }\r\n\r\n private changeProgram(program?: ShaderProgram): boolean {\r\n if (this._program === program) {\r\n return true;\r\n } else if (undefined !== this._program) {\r\n this._program.endUse();\r\n }\r\n\r\n this._program = program;\r\n if (undefined !== program && !program.use(this.params)) {\r\n this._program = undefined;\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ShaderProgram.js","sourceRoot":"","sources":["../../../../src/render/webgl/ShaderProgram.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAc,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAgBlD;;GAEG;AACH,MAAM,OAAO,OAAO;IAIlB,YAAsB,IAAY,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAEnD,OAAO,CAAC,IAAmB;QAChC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YAChC,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACvD;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,OAAO,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CACrE;AASD;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO;IAGzC,YAAmB,IAAY,EAAE,IAAwB;QACvD,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEM,IAAI,CAAC,MAA2B;QACrC,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAClC;IACH,CAAC;CACF;AASD;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO;IAGzC,YAAmB,IAAY,EAAE,IAAwB;QACvD,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEM,IAAI,CAAC,MAAkB;QAC5B,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAClC;IACH,CAAC;CACF;AAWD,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAkBxB,YAAmB,EAAgB,EAAE,UAAkB,EAAE,UAAkB,EAAE,OAAkD,EAAE,WAAmB,EAAE,eAAuB;QAdrK,WAAM,GAAY,KAAK,CAAC;QACxB,YAAO,sBAA2C;QACzC,qBAAgB,GAAG,IAAI,KAAK,EAAkB,CAAC;QAC/C,qBAAgB,GAAG,IAAI,KAAK,EAAkB,CAAC;QAKxD,cAAS,GAAW,CAAC,CAAC,CAAC;QACvB,cAAS,GAAW,CAAC,CAAC,CAAC;QACvB,cAAS,GAAW,CAAC,CAAC,CAAC;QACvB,cAAS,GAAW,CAAC,CAAC,CAAC;QAI7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvF,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC;IAEnE,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,CAAC,OAAO,qBAA2B,CAAC;SACzC;IACH,CAAC;IAED,IAAW,SAAS,KAA+B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5E,IAAW,YAAY,KAAK,OAAO,uBAA6B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/E,IAAW,UAAU,KAAK,OAAO,oBAA0B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAElE,aAAa,CAAC,IAAmB;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEnC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,MAAM;YACjB,OAAO,SAAS,CAAC;QAEnB,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC9E,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAY,CAAC;QAC7F,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,sCAAsC,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,yBAAyB,IAAI,CAAC,WAAW,EAAE,CAAC;YACxL,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;SAC7B;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE;YACxC,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;YAC7D,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;SAC9C;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,IAAiB,EAAE,IAAiB;QACtD,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,6DAA6D;YAC1H,OAAO,KAAK,CAAC;QAEf,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEvC,gDAAgD;QAChD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,GAAW,EAAE,EAAE;gBAC5D,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;SACJ;QAED,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtD,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,MAAM,SAAS,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAY,CAAC;QACrG,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,GAAG,GAAG,+CAA+C,OAAO,uBAAuB,WAAW,yBAAyB,IAAI,CAAC,WAAW,EAAE,CAAC;YAChJ,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;SACtB;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,SAAkB,KAAK;QACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,oBAA0B;YAC1F,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE7B,QAAQ,IAAI,CAAC,OAAO,EAAE;YACpB,oBAA0B,CAAC,CAAC,uBAA6B;YACzD,oBAA0B,CAAC,CAAC,uBAA6B;YACzD,OAAO,CAAC,CAAC;gBACP,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,CAAC,OAAO,kBAAwB,CAAC;oBACrC,uBAA6B;iBAC9B;gBACD,MAAM;aACP;SACF;QAED,IAAI,CAAC,OAAO,kBAAwB,CAAC;QAErC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;YAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAC5H,IAAI,CAAC,OAAO,kBAAwB,CAAC;QAEzC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,oBAA0B;YAC1F,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE7B,IAAI,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB;YAC3D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAEzC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,GAAG,CAAC,MAA2B;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAA0B;YAC9C,OAAO,KAAK,CAAC;QAEf,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC3D,OAAO,KAAK,CAAC;QAEf,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB;YACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,IAAI,CAAC,MAAkB;QAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB;YACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAC,IAAY,EAAE,OAA2B;QAChE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAEM,iBAAiB,CAAC,IAAY,EAAE,OAA2B;QAChE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAEO,eAAe,CAAoB,QAAa;QACtD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBACxB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY;YACvC,OAAO;QAET,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAE5C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAE5C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAE5C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IAC9C,CAAC;IAEO,cAAc,CAAC,IAAa,EAAE,IAAY,EAAE,GAAW,EAAE,MAAmB;QAClF,kEAAkE;QAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY;YACvC,OAAO;QAET,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrD,IAAI,KAAa,CAAC;QAClB,IAAI,IAAI,EAAE;YACR,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACrC;aAAM;YACL,iGAAiG;YACjG,KAAK,GAAG,UAAU,WAAW,CAAC,MAAM,EAAE,CAAC;SACxC;QAED,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC;QAC9B,IAAI,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI;YACN,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;;YAE5B,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;QAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI;YACP,OAAO;QAET,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI;YACP,OAAO;QAET,wFAAwF;QAExF,4CAA4C;QAC5C,MAAM,MAAM,GAAG,GAAG,KAAK,OAAO,CAAC;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,qBAAqB;QACzC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,mBAAmB,GAAG,KAAK,CAAC,CAAC,oBAAoB;QACrD,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACjF,MAAM,KAAK,GAAa,IAAI,KAAK,EAAU,CAAC;QAC5C,MAAM,QAAQ,GAAa,IAAI,KAAK,EAAU,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG;YACrC,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC;gBAC1C,IAAI,GAAG,IAAI,CAAC;YAEd,IAAI,IAAI;gBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAEvB,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE;gBAC9C,IAAI,GAAG,KAAK,CAAC;aACd;iBAAM,IAAI,CAAC,IAAI,EAAE,EAAE,mCAAmC;gBACrD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,mCAAmC;oBACtE,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBACtE,EAAE,GAAG,CAAC;wBACN,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;wBAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACrD;iBACF;gBAED,IAAI,IAAI,EAAE;oBACR,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB;wBAC3D,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;4BACtE,EAAE,GAAG,CAAC;4BACN,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAC1C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;yBAClD;qBACF;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;wBACzD,SAAS,GAAG,IAAI,CAAC;qBAClB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE;wBACzD,WAAW,GAAG,IAAI,CAAC;qBACpB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE;wBACvD,KAAK,CAAC,GAAG,CAAC,GAAG,4BAA4B,CAAC;qBAC3C;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;wBACnD,KAAK,CAAC,GAAG,CAAC,GAAG,0CAA0C,CAAC;qBACzD;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;wBACnD,gFAAgF;wBAChF,KAAK,CAAC,GAAG,CAAC,GAAG,8CAA8C,CAAC;wBAC5D,IAAI,IAAI,GAAG,CAAC,CAAC;wBACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;4BACxB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,aAAa,IAAI,GAAG,CAAC,CAAC;4BACpD,EAAE,IAAI,CAAC;yBACR;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,uCAAuC,CAAC,CAAC;wBAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;4BACxB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;4BAC9B,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BACvB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC9B,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,GAAG,CAAC,CAAC;yBACtD;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;wBACjD,IAAI,SAAS,EAAE;4BACb,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,qCAAqC,CAAC,CAAC;yBAC7D;wBAED,IAAI,WAAW,EAAE;4BACf,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,mCAAmC,CAAC,CAAC;yBAC3D;wBAED,IAAI,IAAI,GAAG,CAAC,CAAC;wBACb,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;4BAC3B,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,aAAa,IAAI,GAAG,CAAC,CAAC;4BACpD,EAAE,IAAI,CAAC;yBACR;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,uEAAuE,CAAC,CAAC;wBAC9F,IAAI,SAAS,EAAE;4BACb,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,qCAAqC,CAAC,CAAC;yBAC7D;wBAED,IAAI,WAAW,EAAE;4BACf,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,uCAAuC,CAAC,CAAC;yBAC/D;wBAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;4BAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;4BAC9B,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BACvB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC9B,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,YAAY,KAAK,MAAM,KAAK,GAAG,CAAC,CAAC;yBACvD;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;qBAC7C;iBACF;qBAAM,EAAE,kBAAkB;oBACzB,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE;wBAChD,EAAE;qBACH;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,IAAI,UAAU,GAAG,CAAC;4BAChB,UAAU,GAAG,CAAC,CAAC;qBAClB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,IAAI,UAAU,GAAG,CAAC;4BAChB,UAAU,GAAG,CAAC,CAAC;qBAClB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,IAAI,UAAU,GAAG,CAAC;4BAChB,UAAU,GAAG,CAAC,CAAC;qBAClB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,UAAU,GAAG,CAAC,CAAC;qBAChB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;wBACxC,WAAW,GAAG,IAAI,CAAC;qBACpB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;wBAC9C,iBAAiB,GAAG,IAAI,CAAC;qBAC1B;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,gBAAgB,GAAG,IAAI,CAAC;qBACzB;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;wBAC5C,eAAe,GAAG,IAAI,CAAC;qBACxB;yBAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE;wBACtD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;4BACxB,mBAAmB,GAAG,IAAI,CAAC;6BACxB;4BACH,IAAI,GAAG,CAAC,CAAC,CAAC;4BACV,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;yBAC9B;qBACF;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;wBAClD,gFAAgF;wBAChF,kGAAkG;wBAClG,KAAK,CAAC,GAAG,CAAC,GAAG,8CAA8C,CAAC;wBAC5D,IAAI,eAAe,EAAE;4BACnB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,sCAAsC,CAAC,CAAC;yBAC9D;wBAED,IAAI,IAAI,GAAG,CAAC,CAAC;wBACb,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;4BAC3B,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,aAAa,IAAI,GAAG,CAAC,CAAC;4BACpD,EAAE,IAAI,CAAC;yBACR;wBAED,IAAI,iBAAiB,EAAE;4BACrB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,yCAAyC,CAAC,CAAC;yBACjE;wBAED,IAAI,gBAAgB,EAAE;4BACpB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,sCAAsC,CAAC,CAAC;yBAC9D;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,yCAAyC,CAAC,CAAC;wBAChE,IAAI,eAAe,EAAE;4BACnB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,sCAAsC,CAAC,CAAC;yBAC9D;wBAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;4BAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;4BAC9B,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BACvB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC9B,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,GAAG,CAAC,CAAC;yBACtD;wBAED,IAAI,iBAAiB,EAAE;4BACrB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,0CAA0C,CAAC,CAAC;yBAClE;wBAED,IAAI,gBAAgB,EAAE;4BACpB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,wCAAwC,CAAC,CAAC;yBAChE;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;wBACjD,IAAI,IAAI,GAAG,CAAC,CAAC;wBACb,OAAO,IAAI,GAAG,UAAU,EAAE;4BACxB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,eAAe,IAAI,eAAe,IAAI,GAAG,CAAC,CAAC;4BAChE,EAAE,IAAI,CAAC;yBACR;wBAED,IAAI,mBAAmB,EAAE;4BACvB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,qCAAqC,CAAC,CAAC;yBAC7D;6BAAM;4BACL,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;gCACpD,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;oCACzB,EAAE,GAAG,CAAC;oCACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,yBAAyB,IAAI,eAAe,IAAI,GAAG,CAAC,CAAC;iCAC3E;6BACF;yBACF;wBAED,IAAI,WAAW,EAAE;4BACf,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;yBACtD;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,0DAA0D,CAAC,CAAC;wBACjF,IAAI,GAAG,CAAC,CAAC;wBACT,OAAO,IAAI,GAAG,UAAU,EAAE;4BACxB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,eAAe,IAAI,eAAe,IAAI,IAAI,CAAC,CAAC;4BACjE,EAAE,IAAI,CAAC;yBACR;wBAED,IAAI,mBAAmB,EAAE;4BACvB,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,yCAAyC,CAAC,CAAC;yBACjE;6BAAM;4BACL,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;gCACpD,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;oCACzB,EAAE,GAAG,CAAC;oCACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,yBAAyB,IAAI,mBAAmB,IAAI,GAAG,CAAC,CAAC;iCAC/E;6BACF;yBACF;wBAED,IAAI,WAAW,EAAE;4BACf,EAAE,GAAG,CAAC;4BACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,+BAA+B,CAAC,CAAC;yBACvD;wBAED,EAAE,GAAG,CAAC;wBACN,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;qBAC7C;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;wBAC9C,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,oCAAoC,CAAC;qBAC7D;yBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;wBACnD,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,qBAAqB,CAAC;qBAC9C;iBACF;gBAED,EAAE,GAAG,CAAC;aACP;SACF;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI;YACN,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;;YAE5B,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAIhC,YAAmB,MAAc,EAAE,IAAgB,EAAE,OAAuB;QASpE,gBAAW,GAAG,KAAK,CAAC;QAR1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,UAAU;QACtB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAGD,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAE7D,0HAA0H;IACnH,OAAO;QACZ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9B,qBAAqB,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAEM,UAAU,CAAC,OAAsB,IAAa,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAW,OAAO,KAAK,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,IAAW,MAAM;QACf,IAAI,SAAS,KAAK,qBAAqB,CAAC,OAAO;YAC7C,qBAAqB,CAAC,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAE5D,OAAO,qBAAqB,CAAC,OAAO,CAAC;IACvC,CAAC;IAEM,IAAI,CAAC,MAAkB;QAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;IACH,CAAC;IACM,aAAa,CAAC,MAAkB;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACnB;IACH,CAAC;IAEM,UAAU,CAAC,MAAc,IAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,SAAS,KAAW,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9C,SAAS,CAAC,KAAY,IAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/D,QAAQ,KAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE3C,aAAa,CAAC,OAAuB;QAC3C,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC7B,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { DebugShaderFile } from \"../RenderSystem\";\r\nimport { AttributeDetails } from \"./AttributeMap\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawParams, ShaderProgramParams } from \"./DrawCommand\";\r\nimport { GL } from \"./GL\";\r\nimport { Batch, Branch } from \"./Graphic\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport { TechniqueFlags } from \"./TechniqueFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Flags which control some conditional branches in shader code\r\n * @internal\r\n */\r\nexport const enum ShaderFlags {\r\n None = 0,\r\n Monochrome = 1 << 0,\r\n NonUniformColor = 1 << 1,\r\n OITFlatAlphaWeight = 1 << 2,\r\n OITScaleOutput = 1 << 3,\r\n IgnoreNonLocatable = 1 << 4,\r\n}\r\n\r\n/** Describes the location of a uniform variable within a shader program.\r\n * @internal\r\n */\r\nexport class Uniform {\r\n private readonly _name: string;\r\n protected _handle?: UniformHandle;\r\n\r\n protected constructor(name: string) { this._name = name; }\r\n\r\n public compile(prog: ShaderProgram): boolean {\r\n assert(!this.isValid);\r\n if (undefined !== prog.glProgram) {\r\n this._handle = UniformHandle.create(prog, this._name);\r\n }\r\n\r\n return this.isValid;\r\n }\r\n\r\n public get isValid(): boolean { return undefined !== this._handle; }\r\n}\r\n\r\n/**\r\n * A function associated with a ProgramUniform which is invoked each time the shader program becomes active.\r\n * The function is responsible for setting the value of the uniform.\r\n * @internal\r\n */\r\nexport type BindProgramUniform = (uniform: UniformHandle, params: ShaderProgramParams) => void;\r\n\r\n/**\r\n * Describes the location of a uniform variable within a shader program, the value of which does not change while the program is active.\r\n * The supplied binding function will be invoked once each time the shader becomes active to set the value of the uniform.\r\n * @internal\r\n */\r\nexport class ProgramUniform extends Uniform {\r\n private readonly _bind: BindProgramUniform;\r\n\r\n public constructor(name: string, bind: BindProgramUniform) {\r\n super(name);\r\n this._bind = bind;\r\n }\r\n\r\n public bind(params: ShaderProgramParams): void {\r\n if (undefined !== this._handle) {\r\n this._bind(this._handle, params);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * A function associated with a GraphicUniform which is invoked each time a new graphic primitive is rendered using the associated shader.\r\n * The function is responsible for setting the value of the uniform.\r\n * @internal\r\n */\r\nexport type BindGraphicUniform = (uniform: UniformHandle, params: DrawParams) => void;\r\n\r\n/**\r\n * Describes the location of a uniform variable within a shader program, the value of which is dependent upon the graphic primitive\r\n * currently being rendered by the program. The supplied binding function will be invoked once for each graphic primitive submitted\r\n * to the program to set the value of the uniform.\r\n * @internal\r\n */\r\nexport class GraphicUniform extends Uniform {\r\n private readonly _bind: BindGraphicUniform;\r\n\r\n public constructor(name: string, bind: BindGraphicUniform) {\r\n super(name);\r\n this._bind = bind;\r\n }\r\n\r\n public bind(params: DrawParams): void {\r\n if (undefined !== this._handle) {\r\n this._bind(this._handle, params);\r\n }\r\n }\r\n}\r\n\r\n/** Describes the compilation status of a shader program. Programs may be compiled during idle time, or upon first use.\r\n * @internal\r\n */\r\nexport const enum CompileStatus {\r\n Success, // The program was successfully compiled.\r\n Failure, // The program failed to compile.\r\n Uncompiled, // No attempt has yet been made to compile the program.\r\n}\r\n\r\n/** @internal */\r\nexport class ShaderProgram implements WebGLDisposable {\r\n public vertSource: string;\r\n public fragSource: string;\r\n private _glProgram?: WebGLProgram;\r\n private _inUse: boolean = false;\r\n private _status: CompileStatus = CompileStatus.Uncompiled;\r\n private readonly _programUniforms = new Array<ProgramUniform>();\r\n private readonly _graphicUniforms = new Array<GraphicUniform>();\r\n private readonly _attrMap?: Map<string, AttributeDetails>;\r\n // for debugging purposes...\r\n public readonly description: string;\r\n private _fragDescription: string;\r\n private _vertGNdx: number = -1;\r\n private _fragGNdx: number = -1;\r\n private _vertHNdx: number = -1;\r\n private _fragHNdx: number = -1;\r\n public readonly outputsToPick;\r\n\r\n public constructor(gl: WebGLContext, vertSource: string, fragSource: string, attrMap: Map<string, AttributeDetails> | undefined, description: string, fragDescription: string) {\r\n this.description = description;\r\n this.outputsToPick = description.includes(\"Overrides\") || description.includes(\"Pick\");\r\n this._fragDescription = fragDescription;\r\n this.vertSource = vertSource;\r\n this.fragSource = fragSource;\r\n this._attrMap = attrMap;\r\n\r\n const glProgram = gl.createProgram();\r\n this._glProgram = (null === glProgram) ? undefined : glProgram;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._glProgram === undefined; }\r\n\r\n public dispose(): void {\r\n if (!this.isDisposed) {\r\n assert(!this._inUse);\r\n System.instance.context.deleteProgram(this._glProgram!);\r\n this._glProgram = undefined;\r\n this._status = CompileStatus.Uncompiled;\r\n }\r\n }\r\n\r\n public get glProgram(): WebGLProgram | undefined { return this._glProgram; }\r\n public get isUncompiled() { return CompileStatus.Uncompiled === this._status; }\r\n public get isCompiled() { return CompileStatus.Success === this._status; }\r\n\r\n private compileShader(type: GL.ShaderType): WebGLShader | undefined {\r\n const gl = System.instance.context;\r\n\r\n const shader = gl.createShader(type);\r\n if (null === shader)\r\n return undefined;\r\n\r\n const src = GL.ShaderType.Vertex === type ? this.vertSource : this.fragSource;\r\n gl.shaderSource(shader, src);\r\n gl.compileShader(shader);\r\n const succeeded = gl.getShaderParameter(shader, GL.ShaderParameter.CompileStatus) as boolean;\r\n if (!succeeded) {\r\n const compileLog = `${GL.ShaderType.Vertex === type ? \"Vertex\" : \"Fragment\"} shader failed to compile. Errors: ${gl.getShaderInfoLog(shader)} Program description: ${this.description}`;\r\n throw new Error(compileLog);\r\n }\r\n\r\n if (System.instance.options.debugShaders) {\r\n const isVS = GL.ShaderType.Vertex === type;\r\n const desc = isVS ? this.description : this._fragDescription;\r\n this.saveShaderCode(isVS, desc, src, shader);\r\n }\r\n\r\n return shader;\r\n }\r\n\r\n private linkProgram(vert: WebGLShader, frag: WebGLShader): boolean {\r\n assert(undefined !== this.glProgram);\r\n if (undefined === this._glProgram || null === this._glProgram) // because WebGL APIs used Thing|null, not Thing|undefined...\r\n return false;\r\n\r\n const gl = System.instance.context;\r\n gl.attachShader(this._glProgram, vert);\r\n gl.attachShader(this._glProgram, frag);\r\n\r\n // bind attribute locations before final linking\r\n if (this._attrMap !== undefined) {\r\n this._attrMap.forEach((attr: AttributeDetails, key: string) => {\r\n gl.bindAttribLocation(this._glProgram!, attr.location, key);\r\n });\r\n }\r\n\r\n gl.linkProgram(this._glProgram);\r\n\r\n const linkLog = gl.getProgramInfoLog(this._glProgram);\r\n gl.validateProgram(this._glProgram);\r\n\r\n const succeeded = gl.getProgramParameter(this._glProgram, GL.ProgramParameter.LinkStatus) as boolean;\r\n if (!succeeded) {\r\n const validateLog = gl.getProgramInfoLog(this._glProgram);\r\n const msg = `Shader program failed to link. Link errors: ${linkLog} Validation errors: ${validateLog} Program description: ${this.description}`;\r\n throw new Error(msg);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public compile(forUse: boolean = false): CompileStatus {\r\n if (System.instance.options.debugShaders && forUse && this._status === CompileStatus.Success)\r\n this.setDebugShaderUsage();\r\n\r\n switch (this._status) {\r\n case CompileStatus.Failure: return CompileStatus.Failure;\r\n case CompileStatus.Success: return CompileStatus.Success;\r\n default: {\r\n if (this.isDisposed) {\r\n this._status = CompileStatus.Failure;\r\n return CompileStatus.Failure;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n this._status = CompileStatus.Failure;\r\n\r\n const vert = this.compileShader(GL.ShaderType.Vertex);\r\n const frag = this.compileShader(GL.ShaderType.Fragment);\r\n if (undefined !== vert && undefined !== frag)\r\n if (this.linkProgram(vert, frag) && this.compileUniforms(this._programUniforms) && this.compileUniforms(this._graphicUniforms))\r\n this._status = CompileStatus.Success;\r\n\r\n if (System.instance.options.debugShaders && forUse && this._status === CompileStatus.Success)\r\n this.setDebugShaderUsage();\r\n\r\n if (true !== System.instance.options.preserveShaderSourceCode)\r\n this.vertSource = this.fragSource = \"\";\r\n\r\n return this._status;\r\n }\r\n\r\n public use(params: ShaderProgramParams): boolean {\r\n if (this.compile(true) !== CompileStatus.Success)\r\n return false;\r\n\r\n assert(undefined !== this._glProgram);\r\n if (null === this._glProgram || undefined === this._glProgram)\r\n return false;\r\n\r\n assert(!this._inUse);\r\n this._inUse = true;\r\n params.context.useProgram(this._glProgram);\r\n\r\n for (const uniform of this._programUniforms)\r\n uniform.bind(params);\r\n\r\n return true;\r\n }\r\n\r\n public endUse() {\r\n this._inUse = false;\r\n System.instance.context.useProgram(null);\r\n }\r\n\r\n public draw(params: DrawParams): void {\r\n assert(this._inUse);\r\n for (const uniform of this._graphicUniforms)\r\n uniform.bind(params);\r\n\r\n params.geometry.draw();\r\n }\r\n\r\n public addProgramUniform(name: string, binding: BindProgramUniform) {\r\n assert(this.isUncompiled);\r\n this._programUniforms.push(new ProgramUniform(name, binding));\r\n }\r\n\r\n public addGraphicUniform(name: string, binding: BindGraphicUniform) {\r\n assert(this.isUncompiled);\r\n this._graphicUniforms.push(new GraphicUniform(name, binding));\r\n }\r\n\r\n private compileUniforms<T extends Uniform>(uniforms: T[]): boolean {\r\n for (const uniform of uniforms) {\r\n if (!uniform.compile(this))\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private setDebugShaderUsage() {\r\n if (!System.instance.options.debugShaders)\r\n return;\r\n\r\n const shaderFiles = System.instance.debugShaderFiles;\r\n if (this._vertGNdx >= 0)\r\n shaderFiles[this._vertGNdx].isUsed = true;\r\n\r\n if (this._fragGNdx >= 0)\r\n shaderFiles[this._fragGNdx].isUsed = true;\r\n\r\n if (this._vertHNdx >= 0)\r\n shaderFiles[this._vertHNdx].isUsed = true;\r\n\r\n if (this._fragHNdx >= 0)\r\n shaderFiles[this._fragHNdx].isUsed = true;\r\n }\r\n\r\n private saveShaderCode(isVS: boolean, desc: string, src: string, shader: WebGLShader) {\r\n // save glsl and hlsl (from Angle and fixed up) in DebugShaderFile\r\n if (!System.instance.options.debugShaders)\r\n return;\r\n\r\n const shaderFiles = System.instance.debugShaderFiles;\r\n let sname: string;\r\n if (desc) {\r\n sname = desc.split(isVS ? \"//!V! \" : \"//!F! \").join(\"\");\r\n sname = sname.split(\": \").join(\"-\");\r\n sname = sname.split(\"; \").join(\"-\");\r\n } else {\r\n // need to investigate shaders with no comments to derive names, for now come up with unique name\r\n sname = `noname-${shaderFiles.length}`;\r\n }\r\n\r\n sname += isVS ? \"_VS\" : \"_FS\";\r\n const fname = `${sname}.glsl`;\r\n let dsfNdx = shaderFiles.push(new DebugShaderFile(fname, src, isVS, true, false));\r\n if (isVS)\r\n this._vertGNdx = dsfNdx - 1;\r\n else\r\n this._fragGNdx = dsfNdx - 1;\r\n\r\n const ext2 = System.instance.context.getExtension(\"WEBGL_debug_shaders\");\r\n if (!ext2)\r\n return;\r\n\r\n const srcH = ext2.getTranslatedShaderSource(shader);\r\n if (!srcH)\r\n return;\r\n\r\n // TODO: implement WebGL2 specific inputs for gl_VertexID and gl_InstanceID if ever used\r\n\r\n // parse and edit srcH to make it compilable\r\n const fnameH = `${sname}.hlsl`;\r\n let numTargets = 0; // for gl_Color cases\r\n let haveGLpos = false;\r\n let haveGLpntsz = false;\r\n let haveGLDepth = false;\r\n let haveGLFrontFacing = false;\r\n let haveGLPointCoord = false;\r\n let haveGLFragCoord = false;\r\n let haveGLFragColorOnly = false; // for only 1 output\r\n const haveGLFragColor = [false, false, false, false, false, false, false, false];\r\n const attrs: string[] = new Array<string>();\r\n const varyings: string[] = new Array<string>();\r\n const lines = srcH.split(\"\\n\");\r\n let toss = true;\r\n for (let ndx = 0; ndx < lines.length;) {\r\n let line = lines[ndx];\r\n if (line.indexOf(\"// INITIAL HLSL END\") >= 0)\r\n toss = true;\r\n\r\n if (toss)\r\n lines.splice(ndx, 1);\r\n\r\n if (line.indexOf(\"// INITIAL HLSL BEGIN\") >= 0) {\r\n toss = false;\r\n } else if (!toss) { // look for lines that need editing\r\n if (line.indexOf(\"Varyings\") >= 0) { // save off varyings in either case\r\n while (ndx + 1 < lines.length && lines[ndx + 1].indexOf(\"static\") >= 0) {\r\n ++ndx;\r\n line = lines[ndx].substring(6).trimLeft();\r\n varyings.push(line.substring(0, line.indexOf(\"=\")));\r\n }\r\n }\r\n\r\n if (isVS) {\r\n if (line.indexOf(\"Attributes\") >= 0) { // save off attributes\r\n while (ndx + 1 < lines.length && lines[ndx + 1].indexOf(\"static\") >= 0) {\r\n ++ndx;\r\n line = lines[ndx].substring(6).trimLeft();\r\n attrs.push(line.substring(0, line.indexOf(\"=\")));\r\n }\r\n } else if (line.indexOf(\"static float4 gl_Position\") >= 0) {\r\n haveGLpos = true;\r\n } else if (line.indexOf(\"static float gl_PointSize\") >= 0) {\r\n haveGLpntsz = true;\r\n } else if (line.indexOf(\"@@ VERTEX ATTRIBUTES @@\") >= 0) {\r\n lines[ndx] = \"// @@ VERTEX ATTRIBUTES @@\";\r\n } else if (line.indexOf(\"@@ MAIN PROLOGUE @@\") >= 0) {\r\n lines[ndx] = \"// @@ MAIN PROLOGUE @@\\ngetInput(input);\";\r\n } else if (line.indexOf(\"@@ VERTEX OUTPUT @@\") >= 0) {\r\n // have to create a VS_OUTPUT struct and a generateOutput function from varyings\r\n lines[ndx] = \"// @@ VERTEX OUTPUT @@\\nstruct VS_INPUT\\n {\";\r\n let aNdx = 0;\r\n for (const tstr of attrs) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${tstr}: TEXCOORD${aNdx};`);\r\n ++aNdx;\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nvoid getInput(VS_INPUT input) {\");\r\n for (const tstr of attrs) {\r\n let t = tstr.indexOf(\"_a\");\r\n let vName = tstr.substring(t);\r\n t = vName.indexOf(\" \");\r\n vName = vName.substring(0, t);\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${vName} = input.${vName};`);\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \"}\\nstruct VS_OUTPUT\\n {\");\r\n if (haveGLpos) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float4 _v_position : SV_Position;\");\r\n }\r\n\r\n if (haveGLpntsz) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float gl_PointSize : PointSize;\");\r\n }\r\n\r\n let vNdx = 0;\r\n for (const tstr of varyings) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${tstr}: TEXCOORD${vNdx};`);\r\n ++vNdx;\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nVS_OUTPUT generateOutput(VS_INPUT input) {\\n VS_OUTPUT output;\");\r\n if (haveGLpos) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output._v_position = gl_Position;\");\r\n }\r\n\r\n if (haveGLpntsz) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output.gl_PointSize = gl_PointSize;\");\r\n }\r\n\r\n for (const tstr of varyings) {\r\n let t = tstr.indexOf(\"_v\");\r\n let vName = tstr.substring(t);\r\n t = vName.indexOf(\" \");\r\n vName = vName.substring(0, t);\r\n ++ndx;\r\n lines.splice(ndx, 0, ` output.${vName} = ${vName};`);\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" return output;\\n}\");\r\n }\r\n } else { // fragment shader\r\n let tNdx = 0;\r\n if (line.indexOf(\"static float4 gl_Color[\") >= 0) {\r\n //\r\n } else if (line.indexOf(\"gl_Color[0] =\") >= 0) {\r\n if (numTargets < 1)\r\n numTargets = 1;\r\n } else if (line.indexOf(\"gl_Color[1] =\") >= 0) {\r\n if (numTargets < 2)\r\n numTargets = 2;\r\n } else if (line.indexOf(\"gl_Color[2] =\") >= 0) {\r\n if (numTargets < 3)\r\n numTargets = 3;\r\n } else if (line.indexOf(\"gl_Color[3] =\") >= 0) {\r\n numTargets = 4;\r\n } else if (line.indexOf(\"gl_Depth\") >= 0) {\r\n haveGLDepth = true;\r\n } else if (line.indexOf(\"gl_FrontFacing\") >= 0) {\r\n haveGLFrontFacing = true;\r\n } else if (line.indexOf(\"gl_PointCoord\") >= 0) {\r\n haveGLPointCoord = true;\r\n } else if (line.indexOf(\"gl_FragCoord\") >= 0) {\r\n haveGLFragCoord = true;\r\n } else if ((tNdx = line.indexOf(\"out_FragColor\")) >= 0) {\r\n const c = line.substr(tNdx + 13, 1);\r\n if (c === \" \" || c === \"=\")\r\n haveGLFragColorOnly = true;\r\n else {\r\n tNdx = +c;\r\n haveGLFragColor[tNdx] = true;\r\n }\r\n } else if (line.indexOf(\"@@ PIXEL OUTPUT @@\") >= 0) {\r\n // have to create a VS_OUTPUT struct, a getInputs function (both from varyings),\r\n // a PS_OUTPUT struct, and a generateOutput function (both based on numTargets or haveGLFragColor)\r\n lines[ndx] = \"// @@ PIXEL OUTPUT @@\\nstruct VS_OUTPUT\\n {\";\r\n if (haveGLFragCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float4 gl_FragCoord : SV_POSITION;\");\r\n }\r\n\r\n let vNdx = 0;\r\n for (const tstr of varyings) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${tstr}: TEXCOORD${vNdx};`);\r\n ++vNdx;\r\n }\r\n\r\n if (haveGLFrontFacing) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" bool gl_FrontFacing : SV_IsFrontFace;\");\r\n }\r\n\r\n if (haveGLPointCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float2 gl_PointCoord : PointCoord;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nvoid getInputs(VS_OUTPUT input) {\");\r\n if (haveGLFragCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" gl_FragCoord = input.gl_FragCoord;\");\r\n }\r\n\r\n for (const tstr of varyings) {\r\n let t = tstr.indexOf(\"_v\");\r\n let vName = tstr.substring(t);\r\n t = vName.indexOf(\" \");\r\n vName = vName.substring(0, t);\r\n ++ndx;\r\n lines.splice(ndx, 0, ` ${vName} = input.${vName};`);\r\n }\r\n\r\n if (haveGLFrontFacing) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" gl_FrontFacing = input.gl_FrontFacing;\");\r\n }\r\n\r\n if (haveGLPointCoord) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" gl_PointCoord = input.gl_PointCoord;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \"}\\nstruct PS_OUTPUT\\n {\");\r\n let cNdx = 0;\r\n while (cNdx < numTargets) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` float4 col${cNdx} : SV_TARGET${cNdx};`);\r\n ++cNdx;\r\n }\r\n\r\n if (haveGLFragColorOnly) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float4 out_FragColor : SV_TARGET;\");\r\n } else {\r\n for (cNdx = 0; cNdx < haveGLFragColor.length; ++cNdx) {\r\n if (haveGLFragColor[cNdx]) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` float4 out_FragColor${cNdx} : SV_TARGET${cNdx};`);\r\n }\r\n }\r\n }\r\n\r\n if (haveGLDepth) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" float gl_Depth : SV_Depth;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" };\\nPS_OUTPUT generateOutput () {\\n PS_OUTPUT output;\");\r\n cNdx = 0;\r\n while (cNdx < numTargets) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` output.col${cNdx} = gl_Color[${cNdx}];`);\r\n ++cNdx;\r\n }\r\n\r\n if (haveGLFragColorOnly) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output.out_FragColor = out_FragColor;\");\r\n } else {\r\n for (cNdx = 0; cNdx < haveGLFragColor.length; ++cNdx) {\r\n if (haveGLFragColor[cNdx]) {\r\n ++ndx;\r\n lines.splice(ndx, 0, ` output.out_FragColor${cNdx} = out_FragColor${cNdx};`);\r\n }\r\n }\r\n }\r\n\r\n if (haveGLDepth) {\r\n ++ndx;\r\n lines.splice(ndx, 0, \" output.gl_Depth = gl_Depth;\");\r\n }\r\n\r\n ++ndx;\r\n lines.splice(ndx, 0, \" return output;\\n}\");\r\n } else if (line.indexOf(\"PS_OUTPUT main\") >= 0) {\r\n lines[ndx] = `// ${line}\\nPS_OUTPUT main(VS_OUTPUT input){`;\r\n } else if (line.indexOf(\"@@ MAIN PROLOGUE @@\") >= 0) {\r\n lines[ndx] = `// ${line}\\ngetInputs(input);`;\r\n }\r\n }\r\n\r\n ++ndx;\r\n }\r\n }\r\n\r\n const srcH2 = lines.join(\"\\n\");\r\n dsfNdx = shaderFiles.push(new DebugShaderFile(fnameH, srcH2, isVS, false, false));\r\n if (isVS)\r\n this._vertHNdx = dsfNdx - 1;\r\n else\r\n this._fragHNdx = dsfNdx - 1;\r\n }\r\n}\r\n\r\n/** Context in which ShaderPrograms are executed. Avoids switching shaders unnecessarily.\r\n * Ensures shader programs are compiled before use and un-bound when scope is disposed.\r\n * This class must *only* be used inside a using() function!\r\n * @internal\r\n */\r\nexport class ShaderProgramExecutor {\r\n private _program?: ShaderProgram;\r\n private static _params?: ShaderProgramParams;\r\n\r\n public constructor(target: Target, pass: RenderPass, program?: ShaderProgram) {\r\n this.params.init(target, pass);\r\n this.changeProgram(program);\r\n }\r\n\r\n public static freeParams(): void {\r\n this._params = undefined;\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n\r\n /** Clears the current program to be executed. This does not free WebGL resources, since those are owned by Techniques. */\r\n public dispose() {\r\n this.changeProgram(undefined);\r\n ShaderProgramExecutor.freeParams();\r\n this._isDisposed = true;\r\n }\r\n\r\n public setProgram(program: ShaderProgram): boolean { return this.changeProgram(program); }\r\n public get isValid() { return undefined !== this._program; }\r\n public get target() { return this.params.target; }\r\n public get renderPass() { return this.params.renderPass; }\r\n public get params() {\r\n if (undefined === ShaderProgramExecutor._params)\r\n ShaderProgramExecutor._params = new ShaderProgramParams();\r\n\r\n return ShaderProgramExecutor._params;\r\n }\r\n\r\n public draw(params: DrawParams) {\r\n assert(this.isValid);\r\n if (undefined !== this._program) {\r\n this._program.draw(params);\r\n }\r\n }\r\n public drawInterrupt(params: DrawParams) {\r\n assert(params.target === this.params.target);\r\n\r\n const tech = params.target.techniques.getTechnique(params.geometry.techniqueId);\r\n const program = tech.getShader(TechniqueFlags.defaults);\r\n if (this.setProgram(program)) {\r\n this.draw(params);\r\n }\r\n }\r\n\r\n public pushBranch(branch: Branch): void { this.target.pushBranch(branch); }\r\n public popBranch(): void { this.target.popBranch(); }\r\n public pushBatch(batch: Batch): void { this.target.pushBatch(batch); }\r\n public popBatch(): void { this.target.popBatch(); }\r\n\r\n private changeProgram(program?: ShaderProgram): boolean {\r\n if (this._program === program) {\r\n return true;\r\n } else if (undefined !== this._program) {\r\n this._program.endUse();\r\n }\r\n\r\n this._program = program;\r\n if (undefined !== program && !program.use(this.params)) {\r\n this._program = undefined;\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -2,6 +2,7 @@
2
2
  * @module WebGL
3
3
  */
4
4
  import { Matrix3, Matrix4 } from "./Matrix";
5
+ import { ShaderProgram } from "./ShaderProgram";
5
6
  import { SyncToken } from "./Sync";
6
7
  /** A handle to the location of a uniform within a shader program
7
8
  * @internal
@@ -12,7 +13,7 @@ export declare class UniformHandle {
12
13
  private readonly _data;
13
14
  syncToken?: SyncToken;
14
15
  private constructor();
15
- static create(program: WebGLProgram, name: string): UniformHandle;
16
+ static create(program: ShaderProgram, name: string): UniformHandle;
16
17
  private updateData;
17
18
  private updateDatum;
18
19
  setMatrix3(mat: Matrix3): void;
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAiBnC;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,OAAO;WAEO,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAQxE,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAcZ,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAKzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAMvC"}
1
+ {"version":3,"file":"UniformHandle.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAiBnC;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,OAAO;WAEO,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAgBzE,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAcZ,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,UAAU,CAAC,GAAG,EAAE,OAAO;IAKvB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAKzC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAK3C,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAMvC"}
@@ -6,6 +6,8 @@
6
6
  * @module WebGL
7
7
  */
8
8
  import { assert } from "@itwin/core-bentley";
9
+ import { Logger } from "@itwin/core-bentley/lib/cjs/Logger";
10
+ import { FrontendLoggerCategory } from "../../FrontendLoggerCategory";
9
11
  import { System } from "./System";
10
12
  /** A handle to the location of a uniform within a shader program
11
13
  * @internal
@@ -17,9 +19,19 @@ export class UniformHandle {
17
19
  this._location = location;
18
20
  }
19
21
  static create(program, name) {
20
- const location = System.instance.context.getUniformLocation(program, name);
21
- if (null === location)
22
- throw new Error(`uniform ${name} not found.`);
22
+ let location = null;
23
+ if (undefined !== program.glProgram) {
24
+ location = System.instance.context.getUniformLocation(program.glProgram, name);
25
+ }
26
+ if (null === location) {
27
+ const errMsg = `uniform ${name} not found in ${program.description}.`;
28
+ if (System.instance.options.errorOnMissingUniform) {
29
+ throw new Error(errMsg);
30
+ }
31
+ else {
32
+ Logger.logError(FrontendLoggerCategory.Render, errMsg);
33
+ }
34
+ }
23
35
  return new UniformHandle(location);
24
36
  }
25
37
  updateData(type, data) {
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation) { this._location = location; }\r\n\r\n public static create(program: WebGLProgram, name: string): UniformHandle {\r\n const location = System.instance.context.getUniformLocation(program, name);\r\n if (null === location)\r\n throw new Error(`uniform ${name} not found.`);\r\n\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Logger } from \"@itwin/core-bentley/lib/cjs/Logger\";\r\nimport { FrontendLoggerCategory } from \"../../FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAGjH,OAAO,EAEL,cAAc,EAAE,kBAAkB,EAAsF,mBAAmB,EAC3I,uBAAuB,EAAyD,MAAM,EACvF,MAAM,gBAAgB,CAAC;AAGxB,gBAAgB;AAChB,qBAAa,6BAA8B,SAAQ,uBAAuB;IACxE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,gBAAgB,CAAgC;IACjD,WAAW,EAAE,GAAG,CAAC;gBACZ,QAAQ,EAAE,qBAAqB;IAK3C,cAAuB,mBAAmB,YAAoB;IAE9D,IAAoB,gBAAgB,WAAsE;IAC1G,IAAoB,gBAAgB,WAAyF;IAEtH,YAAY,CAAC,SAAS,EAAE,GAAG;;;;YAKpB,SAAS;IAUD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;cAuD7F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;IAoBxG,OAAO,CAAC,oBAAoB;IAQN,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDjC,OAAO;YAMT,eAAe;IAoDP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1G,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzJ,SAAS,CAAC,cAAc,CAAC,MAAM,SAAS,GAAG,MAAM;IAOpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB3F"}
1
+ {"version":3,"file":"ArcGISMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAA6B,MAAM,oBAAoB,CAAC;AAGjH,OAAO,EAEL,cAAc,EAAE,kBAAkB,EAAsF,mBAAmB,EAC3I,uBAAuB,EAAyD,MAAM,EACvF,MAAM,gBAAgB,CAAC;AAKxB,gBAAgB;AAChB,qBAAa,6BAA8B,SAAQ,uBAAuB;IACxE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,gBAAgB,CAAgC;IACjD,WAAW,EAAE,GAAG,CAAC;gBACZ,QAAQ,EAAE,qBAAqB;IAK3C,cAAuB,mBAAmB,YAAoB;IAE9D,IAAoB,gBAAgB,WAAsE;IAC1G,IAAoB,gBAAgB,WAAyF;IAEtH,YAAY,CAAC,SAAS,EAAE,GAAG;;;;YAKpB,SAAS;IAUD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;cAuD7F,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI;IAmCxG,OAAO,CAAC,oBAAoB;IAQN,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiFjC,OAAO;YAMT,eAAe;IAoDP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1G,cAAc,CAAC,YAAY,EAAE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzJ,SAAS,CAAC,cAAc,CAAC,MAAM,SAAS,GAAG,MAAM;IAOpC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB3F"}
@@ -11,6 +11,8 @@ import { IModelApp } from "../../../IModelApp";
11
11
  import { NotifyMessageDetails, OutputMessagePriority } from "../../../NotificationManager";
12
12
  import { ArcGisErrorCode, ArcGISTileMap, ArcGisUtilities, MapCartoRectangle, MapFeatureInfoRecord, MapLayerImageryProvider, MapLayerImageryProviderStatus, } from "../../internal";
13
13
  import { PropertyValueFormat, StandardTypeNames } from "@itwin/appui-abstract";
14
+ import { Range2d } from "@itwin/core-geometry";
15
+ import { isArray } from "lodash";
14
16
  /** @internal */
15
17
  export class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
16
18
  constructor(settings) {
@@ -86,7 +88,7 @@ export class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
86
88
  }
87
89
  _generateChildIds(tile, resolveChildren) {
88
90
  const childIds = this.getPotentialChildIds(tile);
89
- if (!this._tileMap || tile.quadId.level < Math.max(4, this.minimumZoomLevel - 1)) {
91
+ if (tile.quadId.level < Math.max(1, this.minimumZoomLevel - 1)) {
90
92
  resolveChildren(childIds);
91
93
  return;
92
94
  }
@@ -100,6 +102,22 @@ export class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
100
102
  resolveChildren(availableChildIds);
101
103
  });
102
104
  }
105
+ else if (this._usesCachedTiles && this.cartoRange) {
106
+ // Filter children by range
107
+ const availableChildIds = new Array();
108
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
109
+ for (let i = 0; i < childIds.length; i++) {
110
+ const childExtent = this.getEPSG4326Extent(childIds[i].row, childIds[i].column, childIds[i].level);
111
+ const childRange = MapCartoRectangle.createFromDegrees(childExtent.longitudeLeft, childExtent.latitudeBottom, childExtent.longitudeRight, childExtent.latitudeTop);
112
+ if (childRange.intersectsRange(this.cartoRange)) {
113
+ availableChildIds.push(childIds[i]);
114
+ }
115
+ }
116
+ resolveChildren(availableChildIds);
117
+ }
118
+ else {
119
+ resolveChildren(childIds); // Resolve all children
120
+ }
103
121
  }
104
122
  isEpsg3857Compatible(tileInfo) {
105
123
  var _a;
@@ -109,7 +127,7 @@ export class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
109
127
  return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;
110
128
  }
111
129
  async initialize() {
112
- var _a, _b, _c, _d;
130
+ var _a, _b, _c, _d, _e;
113
131
  const json = await ArcGisUtilities.getServiceJson(this._settings.url, this.getRequestAuthorization());
114
132
  if (json === undefined)
115
133
  throw new ServerError(IModelStatus.ValidationFailed, "");
@@ -147,6 +165,20 @@ export class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
147
165
  }
148
166
  }
149
167
  }
168
+ // Sometimes footprint request doesnt work, fallback to dataset fullextent
169
+ if (this.cartoRange === undefined && json.fullExtent) {
170
+ if (json.fullExtent.spatialReference.latestWkid === 3857) {
171
+ const range3857 = Range2d.createFrom({
172
+ low: { x: json.fullExtent.xmin, y: json.fullExtent.ymin },
173
+ high: { x: json.fullExtent.xmax, y: json.fullExtent.ymax }
174
+ });
175
+ const west = this.getEPSG4326Lon(range3857.xLow);
176
+ const south = this.getEPSG4326Lat(range3857.yLow);
177
+ const east = this.getEPSG4326Lon(range3857.xHigh);
178
+ const north = this.getEPSG4326Lat(range3857.yHigh);
179
+ this.cartoRange = MapCartoRectangle.createFromDegrees(west, south, east, north);
180
+ }
181
+ }
150
182
  // Read minLOD if available
151
183
  if (json.minLOD !== undefined) {
152
184
  const minLod = parseInt(json.minLOD, 10);
@@ -154,6 +186,18 @@ export class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {
154
186
  this._minDepthFromLod = minLod;
155
187
  }
156
188
  }
189
+ else if (json.minScale) {
190
+ // Read min LOD using minScale
191
+ const minScale = json.minScale;
192
+ if (((_e = json.tileInfo) === null || _e === void 0 ? void 0 : _e.lods) !== undefined && isArray(json.tileInfo.lods)) {
193
+ for (const lod of json.tileInfo.lods) {
194
+ if (lod.scale < minScale) {
195
+ this._minDepthFromLod = lod.level;
196
+ break;
197
+ }
198
+ }
199
+ }
200
+ }
157
201
  }
158
202
  }
159
203
  getLogo() {
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISMapLayerImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { getJson, request, RequestOptions, Response } from \"../../../request/Request\";\r\nimport { Cartographic, ImageMapLayerSettings, ImageSource, IModelStatus, ServerError } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\nimport { NotifyMessageDetails, OutputMessagePriority } from \"../../../NotificationManager\";\r\nimport {\r\n ArcGisErrorCode, ArcGISTileMap, ArcGisUtilities,\r\n ImageryMapTile, ImageryMapTileTree, MapCartoRectangle, MapFeatureInfoRecord, MapLayerAccessClient, MapLayerAccessToken, MapLayerFeatureInfo,\r\n MapLayerImageryProvider, MapLayerImageryProviderStatus, MapSubLayerFeatureInfo, QuadId,\r\n} from \"../../internal\";\r\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\r\n\r\n/** @internal */\r\nexport class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {\r\n private _maxDepthFromLod = 0;\r\n private _minDepthFromLod = 0;\r\n private _copyrightText = \"Copyright\";\r\n private _querySupported = false;\r\n private _tileMapSupported = false;\r\n private _tileMap: ArcGISTileMap|undefined;\r\n private _accessClient: MapLayerAccessClient|undefined;\r\n private _lastAccessToken: MapLayerAccessToken|undefined;\r\n public serviceJson: any;\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, false);\r\n this._accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(settings.formatId);\r\n }\r\n\r\n protected override get _filterByCartoRange() { return false; } // Can't trust footprint ranges (USGS Hydro)\r\n\r\n public override get minimumZoomLevel() { return Math.max(super.minimumZoomLevel, this._minDepthFromLod); }\r\n public override get maximumZoomLevel() { return this._maxDepthFromLod > 0 ? this._maxDepthFromLod : super.maximumZoomLevel; }\r\n\r\n public uintToString(uintArray: any) {\r\n return Buffer.from(uintArray).toJSON();\r\n\r\n }\r\n\r\n private async fetchTile(row: number, column: number, zoomLevel: number): Promise<Response | undefined> {\r\n const tileRequestOptions: RequestOptions = { method: \"GET\", responseType: \"arraybuffer\" };\r\n tileRequestOptions.auth = this.getRequestAuthorization();\r\n const tileUrl: string = await this.constructUrl(row, column, zoomLevel);\r\n if (tileUrl.length === 0)\r\n return undefined;\r\n\r\n return request(tileUrl, tileRequestOptions);\r\n }\r\n\r\n public override async loadTile(row: number, column: number, zoomLevel: number): Promise<ImageSource | undefined> {\r\n\r\n if ((this.status === MapLayerImageryProviderStatus.RequireAuth)) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n let tileResponse = await this.fetchTile(row, column, zoomLevel);\r\n if (tileResponse === undefined)\r\n return undefined;\r\n\r\n // Check the content type from the response, it might contain an authentication error that need to be reported.\r\n // Skip if the layer state was already invalid\r\n if (ArcGisUtilities.hasTokenError(tileResponse)) {\r\n\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken) {\r\n tileResponse = await this.fetchTile(row, column, zoomLevel);\r\n if (tileResponse === undefined)\r\n return undefined;\r\n }\r\n\r\n // OK at this point, if response still contain a token error, we assume end-user will\r\n // have to provide credentials again. Change the layer status so we\r\n // don't make additional invalid requests..\r\n if (tileResponse && ArcGisUtilities.hasTokenError(tileResponse)) {\r\n // Check again layer status, it might have change during await.\r\n if (this.status === MapLayerImageryProviderStatus.Valid) {\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n this.onStatusChanged.raiseEvent(this);\r\n\r\n // Only report error to end-user if we were previously able to fetch tiles\r\n // and then encountered an error, otherwise I assume an error was already reported\r\n // through the source validation process.\r\n if (this._hasSuccessfullyFetchedTile) {\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.LoadTileTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n }\r\n\r\n if (!this._hasSuccessfullyFetchedTile) {\r\n this._hasSuccessfullyFetchedTile = true;\r\n }\r\n return this.getImageFromTileResponse(tileResponse, zoomLevel);\r\n } catch (error) {\r\n return undefined;\r\n }\r\n }\r\n protected override _generateChildIds(tile: ImageryMapTile, resolveChildren: (childIds: QuadId[]) => void) {\r\n const childIds = this.getPotentialChildIds(tile);\r\n if (!this._tileMap || tile.quadId.level < Math.max(4, this.minimumZoomLevel-1)) {\r\n resolveChildren(childIds);\r\n return;\r\n }\r\n\r\n if (this._tileMap) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._tileMap.getChildrenAvailability(childIds).then((availability) => {\r\n const availableChildIds = new Array<QuadId>();\r\n for (let i = 0; i < availability.length; i++)\r\n if (availability[i])\r\n availableChildIds.push(childIds[i]);\r\n\r\n resolveChildren (availableChildIds);\r\n });\r\n }\r\n }\r\n\r\n private isEpsg3857Compatible(tileInfo: any) {\r\n if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))\r\n return false;\r\n\r\n const zeroLod = tileInfo.lods[0];\r\n return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;\r\n }\r\n\r\n public override async initialize(): Promise<void> {\r\n\r\n const json = await ArcGisUtilities.getServiceJson(this._settings.url, this.getRequestAuthorization());\r\n if (json === undefined)\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n\r\n if (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken) {\r\n // Check again layer status, it might have change during await.\r\n if (this.status === MapLayerImageryProviderStatus.Valid) {\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n this.onStatusChanged.raiseEvent(this);\r\n }\r\n }\r\n\r\n if (json !== undefined) {\r\n this.serviceJson = json;\r\n if (json.capabilities) {\r\n\r\n this._querySupported = json.capabilities.indexOf(\"Query\") >= 0;\r\n this._tileMapSupported = json.capabilities.indexOf(\"Tilemap\") >= 0;\r\n }\r\n if (json.copyrightText) this._copyrightText = json.copyrightText;\r\n if (false !== (this._usesCachedTiles = json.tileInfo !== undefined && this.isEpsg3857Compatible(json.tileInfo))) {\r\n if (json.maxScale !== undefined && json.maxScale !== 0 && Array.isArray(json.tileInfo.lods)) {\r\n for (; this._maxDepthFromLod < json.tileInfo.lods.length && json.tileInfo.lods[this._maxDepthFromLod].scale > json.maxScale; this._maxDepthFromLod++)\r\n ;\r\n }\r\n }\r\n\r\n // Create tile map object only if we are going to request tiles from this server and it support tilemap requests.\r\n if (this._usesCachedTiles && this._tileMapSupported) {\r\n this._tileMap = new ArcGISTileMap(this._settings.url, json.tileInfo?.lods?.length);\r\n }\r\n\r\n const footprintJson = await ArcGisUtilities.getFootprintJson(this._settings.url, this.getRequestAuthorization());\r\n if (undefined !== footprintJson && undefined !== footprintJson.featureCollection && Array.isArray(footprintJson.featureCollection.layers)) {\r\n for (const layer of footprintJson.featureCollection.layers) {\r\n if (layer.layerDefinition && layer.layerDefinition.extent) {\r\n this.cartoRange = MapCartoRectangle.createFromDegrees(layer.layerDefinition.extent.xmin, layer.layerDefinition.extent.ymin, layer.layerDefinition.extent.xmax, layer.layerDefinition.extent.ymax);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Read minLOD if available\r\n if (json.minLOD !== undefined) {\r\n const minLod = parseInt(json.minLOD, 10);\r\n if (!Number.isNaN(minLod)) {\r\n this._minDepthFromLod = minLod;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override getLogo() {\r\n return IModelApp.makeLogoCard({ heading: \"ArcGIS\", notice: this._copyrightText });\r\n }\r\n\r\n // Translates the provided Cartographic into a EPSG:3857 point, and retrieve information.\r\n // tolerance is in pixels\r\n private async getIdentifyData(quadId: QuadId, carto: Cartographic, tolerance: number): Promise<any> {\r\n const bboxString = this.getEPSG3857ExtentString(quadId.row, quadId.column, quadId.level);\r\n const x = this.getEPSG3857X(carto.longitudeDegrees);\r\n const y = this.getEPSG3857Y(carto.latitudeDegrees);\r\n const tmpUrl = `${this._settings.url}/identify?f=json&tolerance=${tolerance}&returnGeometry=false&sr=3857&imageDisplay=${this.tileSize},${this.tileSize},96&layers=${this.getLayerString(\"visible\")}&geometry=${x},${y}&geometryType=esriGeometryPoint&mapExtent=${bboxString}`;\r\n const urlObj = new URL(tmpUrl);\r\n\r\n if (this._accessClient) {\r\n try {\r\n this._lastAccessToken = undefined; // reset any previous accessToken, and rely on access client's cache\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n\r\n let json = await getJson(urlObj.toString());\r\n if (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken) {\r\n\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken ) {\r\n const urlObj2 = new URL(tmpUrl);\r\n if (this._accessClient) {\r\n try {\r\n await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n json = await getJson(urlObj2.toString());\r\n }\r\n\r\n // OK at this point, if response still contain a token error, we assume end-user will\r\n // have to provide credentials again. Change the layer status so we\r\n // don't make additional invalid requests..\r\n if (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken) {\r\n // Check again layer status, it might have change during await.\r\n if (this.status === MapLayerImageryProviderStatus.Valid) {\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.FetchTooltipTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n\r\n json = undefined;\r\n }\r\n }\r\n\r\n return json;\r\n }\r\n\r\n // Makes an identify request to ESRI MapService server, and return it as a list of formatted strings\r\n public override async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await super.getToolTip(strings, quadId, carto, tree);\r\n\r\n if (!this._querySupported)\r\n return;\r\n\r\n const stringSet = new Set<string>();\r\n const json = await this.getIdentifyData(quadId, carto, 1);\r\n\r\n if (json && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n if (result.attributes !== undefined && result.attributes[result.displayFieldName] !== undefined) {\r\n const thisString = `${result.displayFieldName}: ${result.attributes[result.displayFieldName]}`;\r\n if (!stringSet.has(thisString)) {\r\n strings.push(thisString);\r\n stringSet.add(thisString);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Makes an identify request to ESRI MapService , and return it as a list MapLayerFeatureInfo object\r\n public override async getFeatureInfo(featureInfos: MapLayerFeatureInfo[], quadId: QuadId, carto: Cartographic, _tree: ImageryMapTileTree): Promise<void> {\r\n if (!this._querySupported)\r\n return;\r\n\r\n const json = await this.getIdentifyData(quadId, carto,5 );\r\n if (json && Array.isArray(json.results)) {\r\n const layerInfo: MapLayerFeatureInfo = {layerName: this._settings.name};\r\n\r\n for (const result of json.results) {\r\n\r\n const subLayerInfo: MapSubLayerFeatureInfo = {\r\n subLayerName: result.layerName ?? \"\",\r\n displayFieldName: result.displayFieldName,\r\n records : [],\r\n };\r\n for (const [key, value] of Object.entries(result.attributes)) {\r\n // Convert everything to string for now\r\n const strValue = String(value);\r\n subLayerInfo.records?.push(new MapFeatureInfoRecord (\r\n {valueFormat:PropertyValueFormat.Primitive, value:strValue, displayValue: strValue},\r\n {name: key, displayLabel: key, typename:StandardTypeNames.String}\r\n ));\r\n }\r\n\r\n if (layerInfo.info === undefined) {\r\n layerInfo.info = [];\r\n }\r\n\r\n if (!(layerInfo.info instanceof HTMLElement)) {\r\n layerInfo.info.push(subLayerInfo);\r\n }\r\n\r\n }\r\n\r\n featureInfos.push(layerInfo);\r\n }\r\n }\r\n\r\n protected getLayerString(prefix = \"show\"): string {\r\n const layers = new Array<string>();\r\n this._settings.subLayers.forEach((subLayer) => { if (this._settings.isSubLayerVisible(subLayer)) layers.push(subLayer.idString); });\r\n return `${prefix}: ${layers.join(\",\")} `;\r\n }\r\n\r\n // construct the Url from the desired Tile\r\n public async constructUrl(row: number, column: number, zoomLevel: number): Promise<string> {\r\n let tmpUrl;\r\n if (this._usesCachedTiles) {\r\n tmpUrl = `${this._settings.url}/tile/${zoomLevel}/${row}/${column} `;\r\n } else {\r\n const bboxString = `${this.getEPSG3857ExtentString(row, column, zoomLevel)}&bboxSR=3857`;\r\n tmpUrl = `${this._settings.url}/export?bbox=${bboxString}&size=${this.tileSize},${this.tileSize}&layers=${this.getLayerString()}&format=png&transparent=${this.transparentBackgroundString}&f=image&sr=3857&imagesr=3857`;\r\n }\r\n const urlObj = new URL(tmpUrl);\r\n try {\r\n if (this._accessClient) {\r\n this._lastAccessToken = undefined; // reset any previous accessToken, and rely on access client's cache\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\r\n mapLayerUrl: new URL(this._settings.url),\r\n userName: this._settings.userName,\r\n password: this._settings.password });\r\n }\r\n\r\n } catch {\r\n }\r\n return urlObj.toString();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGISMapLayerImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { getJson, request, RequestOptions, Response } from \"../../../request/Request\";\r\nimport { Cartographic, ImageMapLayerSettings, ImageSource, IModelStatus, ServerError } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\nimport { NotifyMessageDetails, OutputMessagePriority } from \"../../../NotificationManager\";\r\nimport {\r\n ArcGisErrorCode, ArcGISTileMap, ArcGisUtilities,\r\n ImageryMapTile, ImageryMapTileTree, MapCartoRectangle, MapFeatureInfoRecord, MapLayerAccessClient, MapLayerAccessToken, MapLayerFeatureInfo,\r\n MapLayerImageryProvider, MapLayerImageryProviderStatus, MapSubLayerFeatureInfo, QuadId,\r\n} from \"../../internal\";\r\nimport { PropertyValueFormat, StandardTypeNames } from \"@itwin/appui-abstract\";\r\nimport { Range2d } from \"@itwin/core-geometry\";\r\nimport { isArray } from \"lodash\";\r\n\r\n/** @internal */\r\nexport class ArcGISMapLayerImageryProvider extends MapLayerImageryProvider {\r\n private _maxDepthFromLod = 0;\r\n private _minDepthFromLod = 0;\r\n private _copyrightText = \"Copyright\";\r\n private _querySupported = false;\r\n private _tileMapSupported = false;\r\n private _tileMap: ArcGISTileMap|undefined;\r\n private _accessClient: MapLayerAccessClient|undefined;\r\n private _lastAccessToken: MapLayerAccessToken|undefined;\r\n public serviceJson: any;\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, false);\r\n this._accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(settings.formatId);\r\n }\r\n\r\n protected override get _filterByCartoRange() { return false; } // Can't trust footprint ranges (USGS Hydro)\r\n\r\n public override get minimumZoomLevel() { return Math.max(super.minimumZoomLevel, this._minDepthFromLod); }\r\n public override get maximumZoomLevel() { return this._maxDepthFromLod > 0 ? this._maxDepthFromLod : super.maximumZoomLevel; }\r\n\r\n public uintToString(uintArray: any) {\r\n return Buffer.from(uintArray).toJSON();\r\n\r\n }\r\n\r\n private async fetchTile(row: number, column: number, zoomLevel: number): Promise<Response | undefined> {\r\n const tileRequestOptions: RequestOptions = { method: \"GET\", responseType: \"arraybuffer\" };\r\n tileRequestOptions.auth = this.getRequestAuthorization();\r\n const tileUrl: string = await this.constructUrl(row, column, zoomLevel);\r\n if (tileUrl.length === 0)\r\n return undefined;\r\n\r\n return request(tileUrl, tileRequestOptions);\r\n }\r\n\r\n public override async loadTile(row: number, column: number, zoomLevel: number): Promise<ImageSource | undefined> {\r\n\r\n if ((this.status === MapLayerImageryProviderStatus.RequireAuth)) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n let tileResponse = await this.fetchTile(row, column, zoomLevel);\r\n if (tileResponse === undefined)\r\n return undefined;\r\n\r\n // Check the content type from the response, it might contain an authentication error that need to be reported.\r\n // Skip if the layer state was already invalid\r\n if (ArcGisUtilities.hasTokenError(tileResponse)) {\r\n\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken) {\r\n tileResponse = await this.fetchTile(row, column, zoomLevel);\r\n if (tileResponse === undefined)\r\n return undefined;\r\n }\r\n\r\n // OK at this point, if response still contain a token error, we assume end-user will\r\n // have to provide credentials again. Change the layer status so we\r\n // don't make additional invalid requests..\r\n if (tileResponse && ArcGisUtilities.hasTokenError(tileResponse)) {\r\n // Check again layer status, it might have change during await.\r\n if (this.status === MapLayerImageryProviderStatus.Valid) {\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n this.onStatusChanged.raiseEvent(this);\r\n\r\n // Only report error to end-user if we were previously able to fetch tiles\r\n // and then encountered an error, otherwise I assume an error was already reported\r\n // through the source validation process.\r\n if (this._hasSuccessfullyFetchedTile) {\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.LoadTileTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n }\r\n\r\n if (!this._hasSuccessfullyFetchedTile) {\r\n this._hasSuccessfullyFetchedTile = true;\r\n }\r\n return this.getImageFromTileResponse(tileResponse, zoomLevel);\r\n } catch (error) {\r\n return undefined;\r\n }\r\n }\r\n protected override _generateChildIds(tile: ImageryMapTile, resolveChildren: (childIds: QuadId[]) => void) {\r\n const childIds = this.getPotentialChildIds(tile);\r\n if (tile.quadId.level < Math.max(1, this.minimumZoomLevel-1)) {\r\n resolveChildren(childIds);\r\n return;\r\n }\r\n\r\n if (this._tileMap) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._tileMap.getChildrenAvailability(childIds).then((availability) => {\r\n const availableChildIds = new Array<QuadId>();\r\n for (let i = 0; i < availability.length; i++)\r\n if (availability[i])\r\n availableChildIds.push(childIds[i]);\r\n\r\n resolveChildren (availableChildIds);\r\n });\r\n } else if (this._usesCachedTiles && this.cartoRange) {\r\n // Filter children by range\r\n const availableChildIds = new Array<QuadId>();\r\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\r\n for (let i = 0; i < childIds.length; i++) {\r\n const childExtent = this.getEPSG4326Extent(childIds[i].row, childIds[i].column, childIds[i].level);\r\n\r\n const childRange = MapCartoRectangle.createFromDegrees(childExtent.longitudeLeft, childExtent.latitudeBottom, childExtent.longitudeRight, childExtent.latitudeTop);\r\n if (childRange.intersectsRange(this.cartoRange)) {\r\n availableChildIds.push(childIds[i]);\r\n }\r\n }\r\n resolveChildren (availableChildIds);\r\n } else {\r\n resolveChildren (childIds); // Resolve all children\r\n }\r\n }\r\n\r\n private isEpsg3857Compatible(tileInfo: any) {\r\n if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))\r\n return false;\r\n\r\n const zeroLod = tileInfo.lods[0];\r\n return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;\r\n }\r\n\r\n public override async initialize(): Promise<void> {\r\n\r\n const json = await ArcGisUtilities.getServiceJson(this._settings.url, this.getRequestAuthorization());\r\n if (json === undefined)\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n\r\n if (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken) {\r\n // Check again layer status, it might have change during await.\r\n if (this.status === MapLayerImageryProviderStatus.Valid) {\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n this.onStatusChanged.raiseEvent(this);\r\n }\r\n }\r\n\r\n if (json !== undefined) {\r\n this.serviceJson = json;\r\n\r\n if (json.capabilities) {\r\n\r\n this._querySupported = json.capabilities.indexOf(\"Query\") >= 0;\r\n this._tileMapSupported = json.capabilities.indexOf(\"Tilemap\") >= 0;\r\n }\r\n if (json.copyrightText) this._copyrightText = json.copyrightText;\r\n if (false !== (this._usesCachedTiles = json.tileInfo !== undefined && this.isEpsg3857Compatible(json.tileInfo))) {\r\n if (json.maxScale !== undefined && json.maxScale !== 0 && Array.isArray(json.tileInfo.lods)) {\r\n for (; this._maxDepthFromLod < json.tileInfo.lods.length && json.tileInfo.lods[this._maxDepthFromLod].scale > json.maxScale; this._maxDepthFromLod++)\r\n ;\r\n }\r\n }\r\n\r\n // Create tile map object only if we are going to request tiles from this server and it support tilemap requests.\r\n if (this._usesCachedTiles && this._tileMapSupported) {\r\n this._tileMap = new ArcGISTileMap(this._settings.url, json.tileInfo?.lods?.length);\r\n }\r\n\r\n const footprintJson = await ArcGisUtilities.getFootprintJson(this._settings.url, this.getRequestAuthorization());\r\n if (undefined !== footprintJson && undefined !== footprintJson.featureCollection && Array.isArray(footprintJson.featureCollection.layers)) {\r\n for (const layer of footprintJson.featureCollection.layers) {\r\n if (layer.layerDefinition && layer.layerDefinition.extent) {\r\n this.cartoRange = MapCartoRectangle.createFromDegrees(layer.layerDefinition.extent.xmin, layer.layerDefinition.extent.ymin, layer.layerDefinition.extent.xmax, layer.layerDefinition.extent.ymax);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Sometimes footprint request doesnt work, fallback to dataset fullextent\r\n if (this.cartoRange === undefined && json.fullExtent) {\r\n if (json.fullExtent.spatialReference.latestWkid === 3857) {\r\n const range3857 = Range2d.createFrom({\r\n low: {x: json.fullExtent.xmin, y: json.fullExtent.ymin},\r\n high: {x: json.fullExtent.xmax, y: json.fullExtent.ymax} });\r\n\r\n const west = this.getEPSG4326Lon(range3857.xLow);\r\n const south = this.getEPSG4326Lat(range3857.yLow);\r\n const east = this.getEPSG4326Lon(range3857.xHigh);\r\n const north = this.getEPSG4326Lat(range3857.yHigh);\r\n this.cartoRange = MapCartoRectangle.createFromDegrees(west, south, east, north);\r\n }\r\n }\r\n\r\n // Read minLOD if available\r\n if (json.minLOD !== undefined) {\r\n const minLod = parseInt(json.minLOD, 10);\r\n if (!Number.isNaN(minLod)) {\r\n this._minDepthFromLod = minLod;\r\n }\r\n } else if (json.minScale) {\r\n // Read min LOD using minScale\r\n const minScale = json.minScale;\r\n if (json.tileInfo?.lods !== undefined && isArray(json.tileInfo.lods)) {\r\n for (const lod of json.tileInfo.lods) {\r\n if (lod.scale < minScale) {\r\n this._minDepthFromLod = lod.level;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override getLogo() {\r\n return IModelApp.makeLogoCard({ heading: \"ArcGIS\", notice: this._copyrightText });\r\n }\r\n\r\n // Translates the provided Cartographic into a EPSG:3857 point, and retrieve information.\r\n // tolerance is in pixels\r\n private async getIdentifyData(quadId: QuadId, carto: Cartographic, tolerance: number): Promise<any> {\r\n const bboxString = this.getEPSG3857ExtentString(quadId.row, quadId.column, quadId.level);\r\n const x = this.getEPSG3857X(carto.longitudeDegrees);\r\n const y = this.getEPSG3857Y(carto.latitudeDegrees);\r\n const tmpUrl = `${this._settings.url}/identify?f=json&tolerance=${tolerance}&returnGeometry=false&sr=3857&imageDisplay=${this.tileSize},${this.tileSize},96&layers=${this.getLayerString(\"visible\")}&geometry=${x},${y}&geometryType=esriGeometryPoint&mapExtent=${bboxString}`;\r\n const urlObj = new URL(tmpUrl);\r\n\r\n if (this._accessClient) {\r\n try {\r\n this._lastAccessToken = undefined; // reset any previous accessToken, and rely on access client's cache\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n\r\n let json = await getJson(urlObj.toString());\r\n if (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken) {\r\n\r\n if (this._accessClient?.invalidateToken !== undefined && this._lastAccessToken !== undefined)\r\n this._accessClient.invalidateToken(this._lastAccessToken);\r\n\r\n // Token might have expired, make a second attempt by forcing new token.\r\n if (this._settings.userName && this._settings.userName.length > 0 && this._lastAccessToken ) {\r\n const urlObj2 = new URL(tmpUrl);\r\n if (this._accessClient) {\r\n try {\r\n await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {mapLayerUrl: urlObj, userName: this._settings.userName, password: this._settings.password });\r\n } catch {\r\n }\r\n }\r\n json = await getJson(urlObj2.toString());\r\n }\r\n\r\n // OK at this point, if response still contain a token error, we assume end-user will\r\n // have to provide credentials again. Change the layer status so we\r\n // don't make additional invalid requests..\r\n if (json?.error?.code === ArcGisErrorCode.TokenRequired || json?.error?.code === ArcGisErrorCode.InvalidToken) {\r\n // Check again layer status, it might have change during await.\r\n if (this.status === MapLayerImageryProviderStatus.Valid) {\r\n this.status = MapLayerImageryProviderStatus.RequireAuth;\r\n const msg = IModelApp.localization.getLocalizedString(\"iModelJs:MapLayers.Messages.FetchTooltipTokenError\", { layerName: this._settings.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Warning, msg));\r\n }\r\n\r\n json = undefined;\r\n }\r\n }\r\n\r\n return json;\r\n }\r\n\r\n // Makes an identify request to ESRI MapService server, and return it as a list of formatted strings\r\n public override async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await super.getToolTip(strings, quadId, carto, tree);\r\n\r\n if (!this._querySupported)\r\n return;\r\n\r\n const stringSet = new Set<string>();\r\n const json = await this.getIdentifyData(quadId, carto, 1);\r\n\r\n if (json && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n if (result.attributes !== undefined && result.attributes[result.displayFieldName] !== undefined) {\r\n const thisString = `${result.displayFieldName}: ${result.attributes[result.displayFieldName]}`;\r\n if (!stringSet.has(thisString)) {\r\n strings.push(thisString);\r\n stringSet.add(thisString);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Makes an identify request to ESRI MapService , and return it as a list MapLayerFeatureInfo object\r\n public override async getFeatureInfo(featureInfos: MapLayerFeatureInfo[], quadId: QuadId, carto: Cartographic, _tree: ImageryMapTileTree): Promise<void> {\r\n if (!this._querySupported)\r\n return;\r\n\r\n const json = await this.getIdentifyData(quadId, carto,5 );\r\n if (json && Array.isArray(json.results)) {\r\n const layerInfo: MapLayerFeatureInfo = {layerName: this._settings.name};\r\n\r\n for (const result of json.results) {\r\n\r\n const subLayerInfo: MapSubLayerFeatureInfo = {\r\n subLayerName: result.layerName ?? \"\",\r\n displayFieldName: result.displayFieldName,\r\n records : [],\r\n };\r\n for (const [key, value] of Object.entries(result.attributes)) {\r\n // Convert everything to string for now\r\n const strValue = String(value);\r\n subLayerInfo.records?.push(new MapFeatureInfoRecord (\r\n {valueFormat:PropertyValueFormat.Primitive, value:strValue, displayValue: strValue},\r\n {name: key, displayLabel: key, typename:StandardTypeNames.String}\r\n ));\r\n }\r\n\r\n if (layerInfo.info === undefined) {\r\n layerInfo.info = [];\r\n }\r\n\r\n if (!(layerInfo.info instanceof HTMLElement)) {\r\n layerInfo.info.push(subLayerInfo);\r\n }\r\n\r\n }\r\n\r\n featureInfos.push(layerInfo);\r\n }\r\n }\r\n\r\n protected getLayerString(prefix = \"show\"): string {\r\n const layers = new Array<string>();\r\n this._settings.subLayers.forEach((subLayer) => { if (this._settings.isSubLayerVisible(subLayer)) layers.push(subLayer.idString); });\r\n return `${prefix}: ${layers.join(\",\")} `;\r\n }\r\n\r\n // construct the Url from the desired Tile\r\n public async constructUrl(row: number, column: number, zoomLevel: number): Promise<string> {\r\n let tmpUrl;\r\n if (this._usesCachedTiles) {\r\n tmpUrl = `${this._settings.url}/tile/${zoomLevel}/${row}/${column} `;\r\n } else {\r\n const bboxString = `${this.getEPSG3857ExtentString(row, column, zoomLevel)}&bboxSR=3857`;\r\n tmpUrl = `${this._settings.url}/export?bbox=${bboxString}&size=${this.tileSize},${this.tileSize}&layers=${this.getLayerString()}&format=png&transparent=${this.transparentBackgroundString}&f=image&sr=3857&imagesr=3857`;\r\n }\r\n const urlObj = new URL(tmpUrl);\r\n try {\r\n if (this._accessClient) {\r\n this._lastAccessToken = undefined; // reset any previous accessToken, and rely on access client's cache\r\n this._lastAccessToken = await ArcGisUtilities.appendSecurityToken(urlObj, this._accessClient, {\r\n mapLayerUrl: new URL(this._settings.url),\r\n userName: this._settings.userName,\r\n password: this._settings.password });\r\n }\r\n\r\n } catch {\r\n }\r\n return urlObj.toString();\r\n }\r\n}\r\n"]}
@@ -28,6 +28,7 @@ export declare class MapCartoRectangle extends Range2d {
28
28
  containsCartographic(carto: Cartographic): boolean;
29
29
  getCenter(result?: Cartographic): Cartographic;
30
30
  fractionFromCartographic(carto: Cartographic): Point2d | undefined;
31
+ /** @internal */
31
32
  getTileFractionRange(tilingScheme: MapTilingScheme): Range2d;
32
33
  }
33
34
  //# sourceMappingURL=MapCartoRectangle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapCartoRectangle.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapCartoRectangle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAS,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,OAAO;gBACzB,IAAI,SAAI,EAAE,KAAK,SAAI,EAAE,IAAI,SAAI,EAAE,KAAK,SAAI;WAG7C,MAAM,CAAC,IAAI,SAAmB,EAAE,KAAK,SAAwB,EAAE,IAAI,SAAkB,EAAE,KAAK,SAAuB,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,iBAAiB;WAOnK,iBAAiB,CAAC,IAAI,SAAO,EAAE,KAAK,SAAM,EAAE,IAAI,SAAM,EAAE,KAAK,SAAK,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,iBAAiB;IAIhI,IAAW,IAAI,IACI,MAAM,CADe;IACxC,IAAW,IAAI,CAAC,CAAC,EAAE,MAAM,EAAqB;IAC9C,IAAW,KAAK,IACI,MAAM,CADe;IACzC,IAAW,KAAK,CAAC,CAAC,EAAE,MAAM,EAAqB;IAC/C,IAAW,IAAI,IACI,MAAM,CADgB;IACzC,IAAW,IAAI,CAAC,CAAC,EAAE,MAAM,EAAsB;IAC/C,IAAW,KAAK,IACI,MAAM,CADgB;IAC1C,IAAW,KAAK,CAAC,CAAC,EAAE,MAAM,EAAsB;IAChD,IAAW,aAAa,WAAuM;IAC/N,IAAW,kBAAkB,IAAI,kBAAkB,CAAqL;IACxO,IAAW,WAAW,iBAA8H;IACpJ,IAAW,cAAc,IAAI,cAAc,CAAwE;IAE5G,IAAI,CAAC,IAAI,SAAI,EAAE,KAAK,SAAI,EAAE,IAAI,SAAI,EAAE,KAAK,SAAI;IAM7C,oBAAoB,CAAC,KAAK,EAAE,YAAY;IACxC,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAG9C,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS;IAClE,oBAAoB,CAAC,YAAY,EAAE,eAAe;CAQ1D"}
1
+ {"version":3,"file":"MapCartoRectangle.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/MapCartoRectangle.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAS,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,OAAO;gBACzB,IAAI,SAAI,EAAE,KAAK,SAAI,EAAE,IAAI,SAAI,EAAE,KAAK,SAAI;WAG7C,MAAM,CAAC,IAAI,SAAmB,EAAE,KAAK,SAAwB,EAAE,IAAI,SAAkB,EAAE,KAAK,SAAuB,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,iBAAiB;WAOnK,iBAAiB,CAAC,IAAI,SAAO,EAAE,KAAK,SAAM,EAAE,IAAI,SAAM,EAAE,KAAK,SAAK,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,iBAAiB;IAIhI,IAAW,IAAI,IACI,MAAM,CADe;IACxC,IAAW,IAAI,CAAC,CAAC,EAAE,MAAM,EAAqB;IAC9C,IAAW,KAAK,IACI,MAAM,CADe;IACzC,IAAW,KAAK,CAAC,CAAC,EAAE,MAAM,EAAqB;IAC/C,IAAW,IAAI,IACI,MAAM,CADgB;IACzC,IAAW,IAAI,CAAC,CAAC,EAAE,MAAM,EAAsB;IAC/C,IAAW,KAAK,IACI,MAAM,CADgB;IAC1C,IAAW,KAAK,CAAC,CAAC,EAAE,MAAM,EAAsB;IAChD,IAAW,aAAa,WAAuM;IAC/N,IAAW,kBAAkB,IAAI,kBAAkB,CAAqL;IACxO,IAAW,WAAW,iBAA8H;IACpJ,IAAW,cAAc,IAAI,cAAc,CAAwE;IAE5G,IAAI,CAAC,IAAI,SAAI,EAAE,KAAK,SAAI,EAAE,IAAI,SAAI,EAAE,KAAK,SAAI;IAM7C,oBAAoB,CAAC,KAAK,EAAE,YAAY;IACxC,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAG9C,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS;IAEzE,gBAAgB;IACT,oBAAoB,CAAC,YAAY,EAAE,eAAe;CAQ1D"}