@itwin/core-frontend 3.0.0-dev.173 → 3.0.0-dev.177

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 (78) hide show
  1. package/LICENSE.md +1 -1
  2. package/lib/cjs/IModelApp.js +1 -1
  3. package/lib/cjs/IModelApp.js.map +1 -1
  4. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  5. package/lib/cjs/SheetViewState.js +1 -2
  6. package/lib/cjs/SheetViewState.js.map +1 -1
  7. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  8. package/lib/cjs/render/RenderSystem.js +5 -6
  9. package/lib/cjs/render/RenderSystem.js.map +1 -1
  10. package/lib/cjs/render/RenderTexture.d.ts +2 -17
  11. package/lib/cjs/render/RenderTexture.d.ts.map +1 -1
  12. package/lib/cjs/render/RenderTexture.js +0 -17
  13. package/lib/cjs/render/RenderTexture.js.map +1 -1
  14. package/lib/cjs/render/primitives/Primitives.d.ts +1 -1
  15. package/lib/cjs/render/primitives/Primitives.d.ts.map +1 -1
  16. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  17. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  18. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  19. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/PlanarClassifier.js +2 -1
  21. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  22. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  23. package/lib/cjs/render/webgl/SolarShadowMap.js +2 -2
  24. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  25. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  26. package/lib/cjs/render/webgl/System.js +15 -11
  27. package/lib/cjs/render/webgl/System.js.map +1 -1
  28. package/lib/cjs/render/webgl/Texture.d.ts +15 -11
  29. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  30. package/lib/cjs/render/webgl/Texture.js +27 -23
  31. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  32. package/lib/cjs/tile/GltfReader.d.ts +29 -17
  33. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  34. package/lib/cjs/tile/GltfReader.js +103 -80
  35. package/lib/cjs/tile/GltfReader.js.map +1 -1
  36. package/lib/cjs/tile/ImdlReader.d.ts +3 -1
  37. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  38. package/lib/cjs/tile/ImdlReader.js +1 -1
  39. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  40. package/lib/esm/IModelApp.js +1 -1
  41. package/lib/esm/IModelApp.js.map +1 -1
  42. package/lib/esm/SheetViewState.d.ts.map +1 -1
  43. package/lib/esm/SheetViewState.js +1 -2
  44. package/lib/esm/SheetViewState.js.map +1 -1
  45. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  46. package/lib/esm/render/RenderSystem.js +6 -7
  47. package/lib/esm/render/RenderSystem.js.map +1 -1
  48. package/lib/esm/render/RenderTexture.d.ts +2 -17
  49. package/lib/esm/render/RenderTexture.d.ts.map +1 -1
  50. package/lib/esm/render/RenderTexture.js +1 -16
  51. package/lib/esm/render/RenderTexture.js.map +1 -1
  52. package/lib/esm/render/primitives/Primitives.d.ts +1 -1
  53. package/lib/esm/render/primitives/Primitives.d.ts.map +1 -1
  54. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  55. package/lib/esm/render/webgl/BackgroundMapDrape.js +2 -2
  56. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  57. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  58. package/lib/esm/render/webgl/PlanarClassifier.js +3 -2
  59. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  60. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  61. package/lib/esm/render/webgl/SolarShadowMap.js +3 -3
  62. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  63. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  64. package/lib/esm/render/webgl/System.js +16 -12
  65. package/lib/esm/render/webgl/System.js.map +1 -1
  66. package/lib/esm/render/webgl/Texture.d.ts +15 -11
  67. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  68. package/lib/esm/render/webgl/Texture.js +28 -24
  69. package/lib/esm/render/webgl/Texture.js.map +1 -1
  70. package/lib/esm/tile/GltfReader.d.ts +29 -17
  71. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  72. package/lib/esm/tile/GltfReader.js +105 -82
  73. package/lib/esm/tile/GltfReader.js.map +1 -1
  74. package/lib/esm/tile/ImdlReader.d.ts +3 -1
  75. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  76. package/lib/esm/tile/ImdlReader.js +1 -1
  77. package/lib/esm/tile/ImdlReader.js.map +1 -1
  78. package/package.json +24 -23
@@ -1 +1 @@
1
- {"version":3,"file":"System.js","sourceRoot":"","sources":["../../../../src/render/webgl/System.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAmG;AAEnG,oDAE4B;AAC5B,oEAAmF;AACnF,+CAA8D;AAC9D,+CAA4C;AAC5C,6DAA0D;AAM1D,oFAA8E;AAU9E,oDAAwH;AACxH,kDAGyB;AAGzB,6DAA0D;AAC1D,qDAAsF;AACtF,6CAA0C;AAC1C,2DAA+E;AAC/E,+CAAsC;AAEtC,+CAA8D;AAC9D,6BAA0B;AAC1B,uCAAoC;AACpC,uCAA0G;AAC1G,mCAAgD;AAChD,yCAAsC;AACtC,yCAAsC;AACtC,iCAAyD;AACzD,6CAAkD;AAClD,+CAAoD;AACpD,yCAA8C;AAC9C,2CAA8E;AAC9E,iDAAuE;AACvE,+CAA4C;AAC5C,+CAA4C;AAC5C,2DAAyF;AACzF,qCAA2D;AAC3D,2CAAyC;AACzC,+CAAoD;AACpD,uCAA0E;AAE1E,6CAAkD;AAWlD;;GAEG;AACH,MAAe,eAAe;IAE5B,YAAmB,MAAc;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;CAK7C;AAED;;GAEG;AACH,MAAM,gBAAiB,SAAQ,eAAe;IAI5C,YAAmB,MAAc,EAAE,cAA8C,EAAE,aAAiD;QAClI,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC;QAC5C,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC;IAC5C,CAAC;IAEM,cAAc,CAAC,WAAqB;QACzC,kJAAkJ;QAClJ,IAAI,SAAS,KAAK,IAAI,CAAC,qBAAqB;YAC1C,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAEM,mBAAmB,CAAC,KAAa,EAAE,OAAe;QACvD,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAChD,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAEM,cAAc,CAAC,IAAsB,EAAE,KAAa,EAAE,KAAa,EAAE,YAAoB;QAC9F,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,EAAE;YAC3C,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;SACtF;IACH,CAAC;IAEM,qBAAqB,CAAC,YAAsB,IAAU,CAAC,CAAC,2BAA2B;CAC3F;AAED;;GAEG;AACH,MAAM,gBAAiB,SAAQ,eAAe;IAE5C,YAAmB,MAAc;QAC/B,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAiC,CAAC;IAC3D,CAAC;IAEM,cAAc,CAAC,WAAqB;QACzC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAEM,mBAAmB,CAAC,KAAa,EAAE,OAAe;QACvD,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,cAAc,CAAC,IAAsB,EAAE,KAAa,EAAE,KAAa,EAAE,YAAoB,IAAU,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAEzK,qBAAqB,CAAC,WAAqB;QAChD,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9E,CAAC;CACF;AAED;;GAEG;AACH,MAAa,KAAK;IAWhB,YAAmB,MAAwB;QAT3C,gDAAgD;QAChC,cAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC9D,+CAA+C;QAC/B,aAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC5D,oDAAoD;QACpC,cAAS,GAAG,IAAI,yBAAU,CAA+B,sBAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpG,mIAAmI;QACnH,6BAAwB,GAAG,IAAI,GAAG,EAA8C,CAAC;QAG/F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC/D,CAAC;IAEM,OAAO;QACZ,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;QAE1D,KAAK,MAAM,OAAO,IAAI,UAAU;YAC9B,IAAA,sBAAO,EAAC,OAAO,CAAC,CAAC;QAEnB,KAAK,MAAM,QAAQ,IAAI,WAAW;YAChC,IAAA,sBAAO,EAAC,QAAQ,CAAC,CAAC;QAEpB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,mEAAmE;IAC5D,WAAW,CAAC,QAAwB;QACzC,IAAI,QAAQ,CAAC,GAAG;YACd,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,mKAAmK;IAC5J,UAAU,CAAC,OAAsB,EAAE,GAAqB;QAC7D,IAAA,qBAAM,EAAC,OAAO,YAAY,iBAAO,CAAC,CAAC;QACnC,IAAI,SAAS,KAAK,GAAG,EAAE;YACrB,IAAI,QAAQ,KAAK,OAAO,GAAG;gBACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;;gBAEhC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SAClC;aAAM,IAAI,OAAO,CAAC,GAAG;YACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,4DAA4D;IACrD,WAAW,CAAC,YAA2B,EAAE,OAAsB;QACpE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,6EAA6E;IACtE,YAAY,CAAC,GAAW;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,4FAA4F;IACrF,YAAY,CAAC,IAAmB;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,iHAAiH;IAC1G,WAAW,CAAC,MAA6B;QAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAI,mCAAmC;YACrF,OAAO,IAAI,mBAAQ,CAAC,MAAM,CAAC,CAAC;QAE9B,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC1C;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,WAAW,CAAC,GAA4B;QAC7C,IAAI,SAAS,KAAK,GAAG;YACnB,OAAO,SAAS,CAAC;aACd,IAAI,OAAO,GAAG,KAAK,QAAQ;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;YAE9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,mDAAmD;IAC5C,qBAAqB,CAAC,GAAe,EAAE,MAAwB,EAAE,MAA4B,EAAE,MAAyB;QAC7H,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG;YACL,OAAO,GAAG,CAAC;QAEb,MAAM,MAAM,GAAG,uBAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,GAAG,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,IAAiC,EAAE,GAAW;QACnF,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QAEjB,wDAAwD;QACxD,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QAEjB,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,4BAA4B,CAAC,IAAiC,EAAE,GAAW;;QACtF,oCAAoC;QACpC,MAAM,YAAY,GAAG,+BAAiB,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mCAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,YAAY,mCAAI,mCAAmB,CAAC,WAAW,CAAC,CAAC;QACzJ,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,IAAA,uCAA2B,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,qBAAS,CAAC,eAAe;gBAC5B,OAAO,SAAS,CAAC;YAEnB,OAAO,qBAAS,CAAC,YAAY,CAAC,aAAa,CAAC;gBAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK;oBACb,YAAY;iBACb;aACF,CAAC,CAAC;SACJ;QAAC,MAAM;YACN,OAAO,SAAS,CAAC;SAClB;gBAAS;YACR,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3C;IACH,CAAC;IAED,mDAAmD;IAC5C,wBAAwB,CAAC,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,MAA4B;QAC1M,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG;YACL,OAAO,GAAG,CAAC;QAEb,MAAM,MAAM,GAAG,uBAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrH,GAAG,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC1C,IAAI,OAAO,YAAY,iBAAO;gBAC5B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAExC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YACnC,IAAI,QAAQ,YAAY,iBAAO;gBAC7B,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;CACF;AAvKD,sBAuKC;AAgBD,gBAAgB;AAChB,MAAa,MAAO,SAAQ,2BAAY;IA0ZtC,YAAsB,MAAyB,EAAE,OAAqB,EAAE,YAA0B,EAAE,OAA6B;QAC/H,KAAK,CAAC,OAAO,CAAC,CAAC;QAzZD,uBAAkB,GAAG,IAAI,yBAAW,EAAE,CAAC;QAEvC,qBAAgB,GAAG,IAAI,8BAAgB,EAAE,CAAC,CAAE,4CAA4C;QAKvF,qBAAgB,GAAqB,EAAE,CAAC;QAGzD,gHAAgH;QAC/F,2BAAsB,GAAwB;;;;SAI9D,CAAC;QACe,4BAAuB,GAAwB;;;;SAI/D,CAAC;QAOc,qBAAgB,GAAsB,EAAE,CAAC;QA+XvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,iBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,YAAY,CAAC,QAAQ;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;aAC3C;YACH,MAAM,oBAAoB,GAAG,YAAY,CAAC,oBAAoB,CAAqB,oBAAoB,CAAC,CAAC;YACzG,MAAM,mBAAmB,GAAG,YAAY,CAAC,oBAAoB,CAAyB,wBAAwB,CAAC,CAAC;YAChH,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;SAC1F;QAED,0EAA0E;QAC1E,IAAI,CAAC,oBAAoB,GAAG,mCAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3G,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,2BAAY,CAAC,kBAAkB,EAAE,EAAE,KAAK,CAAC,CAAC;IACpG,CAAC;IA9YM,MAAM,KAAK,QAAQ,KAAK,OAAO,qBAAS,CAAC,YAAsB,CAAC,CAAC,CAAC;IAEzE,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;IACnE,IAAW,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9D,IAAW,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAExD,IAAW,UAAU;QACnB,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAW,kBAAkB;QAC3B,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAoB,cAAc,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IACzF,IAAoB,kBAAkB,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClG,IAAoB,kCAAkC,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAExG,6FAA6F;IAC7F,IAAoB,oBAAoB,KAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,IAAW,QAAQ,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,IAAoB,QAAQ,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvE,cAAc,CAAC,WAAqB,IAAU,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7F,UAAU;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;IACjD,CAAC;IAED,gIAAgI;IAChH,KAAK,CAAC,0BAA0B;QAC9C,MAAM,YAAY,GAAG,+BAAqB,CAAC,QAAQ,CAAC;QACpD,IAAI,YAAY,CAAC,iBAAiB,GAAG,CAAC,IAAI,YAAY,CAAC,kBAAkB,GAAG,CAAC;YAC3E,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAY,EAAE,EAAE;YACjD,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE;gBACzC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sFAAsF;IAC/E,MAAM,CAAC,aAAa,CAAC,MAAyB,EAAE,SAAkB,EAAE,sBAA+C;QACxH,IAAI,iBAAiB,GAA2B,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;QACxF,IAAI,SAAS,KAAK,sBAAsB,EAAE;YACxC,gHAAgH;YAChH,iBAAiB,GAAG,EAAE,GAAG,iBAAiB,EAAE,GAAG,sBAAsB,EAAE,CAAC;SACzE;QAED,sDAAsD;QACtD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,SAAS;YACX,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAE3D,oCAAoC;QACpC,IAAI,IAAI,KAAK,OAAO;YAClB,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAE1D,OAAO,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,SAAS,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,SAAgC;QACnD,MAAM,OAAO,GAAyB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,IAAI,KAAK,MAAM;YACjB,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC;QAEnF,MAAM,SAAS,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,iBAAiB,CAAC,CAAC;QACpF,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;SAC9E;QAED,MAAM,YAAY,GAAG,kCAAY,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC9E,IAAI,SAAS,KAAK,YAAY;YAC5B,MAAM,IAAI,yBAAW,CAAC,4BAAa,CAAC,KAAK,EAAE,6CAA6C,CAAC,CAAC;QAE5F,sDAAsD;QACtD,OAAO,CAAC,SAAS,CAAC,OAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAE,cAAc;QAExD,IAAI,CAAC,YAAY,CAAC,kBAAkB;YAClC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,iBAAiB;YACjC,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,gCAAgC,EAAE;YAClD,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAClC,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;SACxC;QACD,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW;eAChC,SAAS,KAAK,IAAI,CAAC,gBAAgB;eACnC,SAAS,KAAK,IAAI,CAAC,aAAa;eAChC,SAAS,KAAK,IAAI,CAAC,mBAAmB,CAAC;IAC9C,CAAC;IAED,+HAA+H;IACxH,OAAO;QACZ,IAAI,CAAC,WAAW,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,gBAAgB,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAA,sBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjD,8GAA8G;QAC9G,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,EAAE;YAC1C,IAAA,sBAAO,EAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,EAAE;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACvC;IACH,CAAC;IAEe,aAAa;QAC3B,IAAI,CAAC,WAAW,GAAG,sBAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,aAAa,GAAG,uBAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/I,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC;QAE7E,IAAI,CAAC,gBAAgB,GAAG,uBAAa,CAAC,aAAa,CAAC,mBAAQ,CAAC,IAAI,EAAE,mBAAQ,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,mBAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1L,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,CAAC;QAEnF,IAAI,CAAC,mBAAmB,GAAG,IAAI,sCAAkB,EAAE,CAAC;IACtD,CAAC;IAEM,YAAY,CAAC,MAAyB;QAC3C,OAAO,IAAI,uBAAc,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAEM,qBAAqB,CAAC,IAAc;QACzC,OAAO,IAAI,wBAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAEM,aAAa,CAAC,OAAoE;QACvF,OAAO,IAAI,sCAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEe,gBAAgB,CAAC,OAAgB,EAAE,IAAqB;QACtE,OAAO,+BAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAEe,4BAA4B,CAAC,WAAiC,EAAE,SAAqB;QACnG,OAAO,iCAAmB,CAAC,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC;IAEe,wBAAwB,CAAC,eAAoC,EAAE,YAAgC,EAAE,MAA0B,EAAE,SAA+B,EAAE,eAAwB,EAAE,QAA2B;QACjO,OAAO,iCAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC9H,CAAC;IACe,iBAAiB,CAAC,WAAiC;QACjE,MAAM,IAAI,GAAG,iCAAmB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,CAAC,CAAC,qBAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAEe,kBAAkB,CAAC,MAAkB,EAAE,QAAkB;QACvE,OAAO,yBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAEe,sBAAsB,CAAC,MAAsB,EAAE,QAAkB;QAC/E,OAAO,2BAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAEe,yBAAyB,CAAC,MAAyB,EAAE,QAAkB;QACrF,OAAO,iCAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAEe,iBAAiB,CAAC,MAA4B;QAC5D,OAAO,kCAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEe,mBAAmB,CAAC,QAAwB,EAAE,SAAsD;QAClH,IAAI,CAAC,CAAC,QAAQ,YAAY,yBAAkB,CAAC,EAAE;YAC7C,IAAI,QAAQ,YAAY,2BAAgB,IAAI,QAAQ,YAAY,iCAAmB;gBACjF,OAAO,qBAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAE/C,IAAA,qBAAM,EAAC,KAAK,EAAE,uDAAuD,CAAC,CAAC;YACvE,OAAO,SAAS,CAAC;SAClB;QAED,IAAA,qBAAM,EAAC,CAAC,SAAS,IAAI,SAAS,YAAY,kCAAc,IAAI,IAAA,4CAAwB,EAAC,SAAS,CAAC,CAAC,CAAC;QACjG,OAAO,kBAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAEe,gBAAgB,CAAC,IAAoB;QACnD,OAAO,qBAAS,CAAC,MAAM,CAAC,IAAI,+BAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAEM,iBAAiB,CAAC,UAA2B;QAClD,OAAO,IAAI,uBAAa,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAEM,mBAAmB,CAAC,MAAqB,EAAE,SAAoB,EAAE,OAA8B;QACpG,OAAO,IAAI,gBAAM,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAEe,4BAA4B,CAAC,OAAsB,EAAE,MAAc;QACjF,OAAO,IAAI,kCAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAEM,WAAW,CAAC,OAAsB,EAAE,QAA4B,EAAE,KAA0B,EAAE,OAAsB;QACzH,OAAO,IAAI,eAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAEe,kBAAkB,CAAC,KAAoB;QACrD,OAAO,IAAI,sBAAY,CAAC,KAAgB,CAAC,CAAC;IAC5C,CAAC;IAEe,kBAAkB,CAAC,OAAsB,EAAE,OAAe;QACxE,OAAO,IAAI,aAAK,CAAC,OAAkB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAEe,2BAA2B,CAAC,OAAsB,EAAE,aAAsB,EAAE,YAAoB,EAAE,SAAiB;QACjI,OAAO,IAAI,sBAAc,CAAC,OAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACxF,CAAC;IAEe,YAAY,CAAC,MAA0B;QACrD,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI;YACxB,OAAO,4BAAgB,CAAC,MAAM,CAAC,oCAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7E,OAAO,8BAAkB,CAAC,MAAM,CAAC,8CAA6B,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACzF,CAAC;IAEe,8BAA8B,CAAC,MAAsC;QACnF,OAAO,IAAA,kDAA8B,EAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAEM,gBAAgB,CAAC,QAAqB;QAC3C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEM,iBAAiB,CAAC,KAAa,EAAE,MAAc,EAAE,aAAqB,CAAC;QAC5E,+GAA+G;QAC/G,QAAQ,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;YACtC,KAAK,+BAAS,CAAC,2BAA2B,CAAC,CAAC;gBAC1C,OAAO,2BAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aAC3C;YACD,KAAK,+BAAS,CAAC,oBAAoB,CAAC,CAAC;gBACnC,OAAO,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,OAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;aAC5H;YACD,KAAK,+BAAS,CAAC,4BAA4B,CAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;oBAC9B,IAAI,UAAU,GAAG,CAAC,EAAE;wBAClB,OAAO,sCAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;qBAC3G;yBAAM;wBACL,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAiC,CAAC;wBACxD,OAAO,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;qBACrH;iBACF;qBAAM;oBACL,MAAM,KAAK,GAAoC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAsB,qBAAqB,CAAC,CAAC;oBAClI,OAAO,uBAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAM,CAAC,uBAAuB,CAAC,CAAC;iBACzH;aACF;YACD,OAAO,CAAC,CAAC;gBACP,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;gBACd,OAAO,SAAS,CAAC;aAClB;SACF;IACH,CAAC;IAED,sGAAsG;IAC/F,eAAe,CAAC,MAAwB;QAC7C,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SACvC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kFAAkF;IAC1E,eAAe,CAAC,MAAwB;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO;QACT,IAAA,sBAAO,EAAC,KAAK,CAAC,CAAC;QACf,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,4FAA4F;IAC5E,cAAc,CAAC,MAA6B,EAAE,MAAwB;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxD,YAAY,CAAC,GAAW,EAAE,MAAwB;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YACR,OAAO,SAAS,CAAC;QACnB,OAAO,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEO,mBAAmB,CAAC,IAAuB;QACjD,MAAM,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACzG,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IAEe,aAAa,CAAC,IAAuB;;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC,WAAW,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAC,CAAC;QACpD,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAC;QAElB,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,2BAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAEjC,8DAA8D;QAC9D,IAAI,MAAM,CAAC;QACX,IAAI,MAAM,YAAY,yBAAW;YAC/B,MAAM,GAAG,uBAAa,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,qCAAqC;;YAEhG,MAAM,GAAG,uBAAa,CAAC,cAAc,CAAC,MAAM,EAAE,mCAAmB,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAE9G,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,IAAI,OAAO,IAAI,IAAI;YACjB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAEe,KAAK,CAAC,uBAAuB,CAAC,IAAiC;QAC7E,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YACpC,OAAO,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAClG,CAAC;IAED,mDAAmD;IACnC,wBAAwB,CAAC,EAAc,EAAE,MAAwB,EAAE,MAA4B,EAAE,MAAyB;QACxI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IAED,mDAAmD;IACnC,2BAA2B,CAAC,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,IAAsB,EAAE,MAAwB,EAAE,MAA4B;QAChP,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpG,CAAC;IAED,4DAA4D;IAC5C,kBAAkB,CAAC,IAAmB,EAAE,MAAyB;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC;YACxB,KAAK,EAAE;gBACL,MAAM;gBACN,YAAY,EAAE,+BAAiB,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mCAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,mCAAmB,CAAC,MAAM;aACtH;YACD,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;YACrD,IAAI,EAAE,2BAAa,CAAC,IAAI,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvD,WAAW,CAAC,GAAoB,EAAE,MAAwB;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YACR,OAAO,SAAS,CAAC;QAEnB,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAEe,gBAAgB,CAAC,UAAsB;QACrD,OAAO,uBAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IACe,wBAAwB,CAAC,UAA6B,EAAE,OAA6B;QACnG,OAAO,uCAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAuBD,kCAAkC;IAC3B,QAAQ,CAAC,MAAwB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,IAAiB,EAAE,MAAyB,EAAE,OAAuB,EAAE,UAAmB;QAC5G,MAAM,KAAK,GAAG,IAAI,GAAG,yBAAW,CAAC,IAAI,CAAC;QACtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE;YAC5C,IAAI,UAAU;gBACZ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEnC,OAAO;SACR;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,wGAAwG;IACjG,aAAa,CAAC,IAAiB,EAAE,OAAuB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtI,wGAAwG;IACjG,kBAAkB,CAAC,IAAiB,EAAE,OAAuB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5I,iGAAiG;IAC1F,iBAAiB,CAAC,IAAiB,EAAE,OAAuB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACzI,iGAAiG;IAC1F,sBAAsB,CAAC,IAAiB,EAAE,OAAuB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/I,oFAAoF;IAC7E,kBAAkB,CAAC,OAAsB,EAAE,IAAiB;QACjE,IAAI,CAAC,eAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,IAAoB,uBAAuB,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtJ,cAAc,CAAC,OAAqB;QACzC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;gBACxC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;gBACrC,MAAM;aACP;SACF;IACH,CAAC;IAED,0EAA0E;IAC1E,kHAAkH;IAClH,qHAAqH;IAC9G,uBAAuB,CAAC,EAAU,EAAE,SAAkB;QAC3D,IAAA,qBAAM,EAAC,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,+DAA+D,CAAC,CAAC;QAClH,IAAA,qBAAM,EAAC,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,+DAA+D,CAAC,CAAC;QAEjH,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,0BAAoC,CAAC,gBAA0B,CAAC;IAChH,CAAC;IAEM,wBAAwB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,QAAQ,KAAK,QAAQ,EAAE;gBACzB,0CAA0C;gBAC1C,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,kBAA4B,QAAQ,CAAC,CAAC;gBAChE,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,kBAA4B,QAAQ,CAAC,CAAC;gBAChE,IAAI,UAAU,KAAK,UAAU,EAAE;oBAC7B,IAAI,UAAU,EAAE;wBACd,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;qBACpC;yBAAM;wBACL,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;qBACrC;iBACF;gBAED,uDAAuD;gBACvD,IAAI,UAAU,EAAE;oBACd,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,oBAA8B,QAAQ,CAAC,CAAC;oBACpE,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,oBAA8B,QAAQ,CAAC,CAAC;oBACpE,IAAI,YAAY,KAAK,YAAY,EAAE;wBACjC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnD;iBACF;gBAED,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;aACnB;YAED,gEAAgE;YAChE,IAAI,CAAC,CAAC,CAAC,IAAI,gBAA0B,CAAC;SACvC;IACH,CAAC;IAEM,mBAAmB,CAAC,KAAa,EAAE,OAAe,IAAI,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7G,UAAU,CAAC,IAAsB,EAAE,KAAa,EAAE,KAAa,EAAE,YAAoB;QAC1F,IAAI,CAAC,KAAK,YAAY,EAAE;YACtB,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;SACnE;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC7C;IACH,CAAC;IAEM,qBAAqB,CAAC,WAAqB,IAAU,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAElG,iBAAiB,CAAC,MAAyB;QACzD,mBAAK,CAAC,YAAY,GAAG,gCAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,gCAAiB,CAAC,WAAW,CAAC,CAAC;QACzF,mBAAK,CAAC,eAAe,GAAG,gCAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,gCAAiB,CAAC,KAAK,CAAC,CAAC;IACxF,CAAC;IAED,2BAA2B;IAC3B,IAAoB,YAAY,KAA+B,OAAO,IAAI,CAAC,CAAC,CAAC;IAG7E,IAAoB,WAAW,aAAc,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7F,IAAoB,WAAW,CAAC,QAAiB,IAAI,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC;IAE7E,WAAW;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAqB,oBAAoB,CAAC,CAAC;QAC7F,IAAI,SAAS,KAAK,GAAG;YACnB,OAAO,KAAK,CAAC;QAEf,GAAG,CAAC,WAAW,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IAC1C,CAAC;IAED,IAAW,kBAAkB,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7E,IAAW,eAAe,CAAC,QAA2C;QACpE,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC;IAC1C,CAAC;IAEe,iBAAiB,CAAC,KAA8B;QAC9D,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB;YACrC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa;YAClC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC7C,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEM,gBAAgB,CAAC,GAAuB;QAC7C,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAnkBD,wBAmkBC","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, BentleyStatus, Dictionary, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ClipVector, Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, ElementAlignedBox3d, Frustum, Gradient, ImageBuffer, ImageBufferFormat, ImageSourceFormat, IModelError, PackedFeatureTable, RenderMaterial, RenderTexture,\r\n} from \"@itwin/core-common\";\r\nimport { Capabilities, DepthType, WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { imageElementFromImageSource } from \"../../ImageUtil\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { MapTileTreeReference, TileTreeReference } from \"../../tile/internal\";\r\nimport { ViewRect } from \"../../ViewRect\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"../GraphicBranch\";\r\nimport { BatchOptions, CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../GraphicBuilder\";\r\nimport { InstancedGraphicParams, PatternGraphicParams } from \"../InstancedGraphicParams\";\r\nimport { PrimitiveBuilder } from \"../primitives/geometry/GeometryListBuilder\";\r\nimport { RealityMeshPrimitive } from \"../primitives/mesh/RealityMeshPrimitive\";\r\nimport { TerrainMeshPrimitive } from \"../primitives/mesh/TerrainMeshPrimitive\";\r\nimport { PointCloudArgs } from \"../primitives/PointCloudPrimitive\";\r\nimport { MeshParams } from \"../primitives/VertexTable\";\r\nimport { PointStringParams } from \"../primitives/PointStringParams\";\r\nimport { PolylineParams } from \"../primitives/PolylineParams\";\r\nimport { RenderClipVolume } from \"../RenderClipVolume\";\r\nimport { RenderGraphic, RenderGraphicOwner } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { CreateTextureArgs, CreateTextureFromSourceArgs, TextureCacheKey, TextureTransparency } from \"../RenderTexture\";\r\nimport {\r\n DebugShaderFile, GLTimerResultCallback, PlanarGridProps, RenderAreaPattern, RenderDiagnostics, RenderGeometry, RenderSkyBoxParams,\r\n RenderSystem, RenderSystemDebugControl, TerrainTexture,\r\n} from \"../RenderSystem\";\r\nimport { RenderTarget } from \"../RenderTarget\";\r\nimport { ScreenSpaceEffectBuilder, ScreenSpaceEffectBuilderParams } from \"../ScreenSpaceEffectBuilder\";\r\nimport { BackgroundMapDrape } from \"./BackgroundMapDrape\";\r\nimport { SkyBoxQuadsGeometry, SkySphereViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { isInstancedGraphicParams, PatternBuffers } from \"./InstancedGeometry\";\r\nimport { Debug } from \"./Diagnostics\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DepthBuffer, FrameBufferStack } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { GLTimer } from \"./GLTimer\";\r\nimport { AnimationTransformBranch, Batch, Branch, Graphic, GraphicOwner, GraphicsArray } from \"./Graphic\";\r\nimport { Layer, LayerContainer } from \"./Layer\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { Material } from \"./Material\";\r\nimport { MeshGraphic, MeshRenderGeometry } from \"./Mesh\";\r\nimport { PointCloudGeometry } from \"./PointCloud\";\r\nimport { PointStringGeometry } from \"./PointString\";\r\nimport { PolylineGeometry } from \"./Polyline\";\r\nimport { Primitive, SkyCubePrimitive, SkySpherePrimitive } from \"./Primitive\";\r\nimport { RenderBuffer, RenderBufferMultiSample } from \"./RenderBuffer\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { createScreenSpaceEffectBuilder, ScreenSpaceEffects } from \"./ScreenSpaceEffect\";\r\nimport { OffScreenTarget, OnScreenTarget } from \"./Target\";\r\nimport { Techniques } from \"./Technique\";\r\nimport { RealityMeshGeometry } from \"./RealityMesh\";\r\nimport { ExternalTextureLoader, Texture, TextureHandle } from \"./Texture\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { PlanarGridGeometry } from \"./PlanarGrid\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport const enum ContextState {\r\n Uninitialized,\r\n Success,\r\n Error,\r\n}\r\n\r\n/** Describes WebGL extension methods.\r\n * @internal\r\n */\r\nabstract class WebGLExtensions {\r\n private _system: System;\r\n public constructor(system: System) {\r\n this._system = system;\r\n }\r\n public get system() { return this._system; }\r\n public abstract setDrawBuffers(attachments: GLenum[]): void;\r\n public abstract vertexAttribDivisor(index: number, divisor: number): void;\r\n public abstract drawArraysInst(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void;\r\n public abstract invalidateFrameBuffer(_attachments: number[]): void;\r\n}\r\n\r\n/** Describes WebGL1 extension methods.\r\n * @internal\r\n */\r\nclass WebGL1Extensions extends WebGLExtensions {\r\n private readonly _drawBuffersExtension?: WEBGL_draw_buffers;\r\n private readonly _instancingExtension?: ANGLE_instanced_arrays;\r\n\r\n public constructor(system: System, drawBuffersExt: WEBGL_draw_buffers | undefined, instancingExt: ANGLE_instanced_arrays | undefined) {\r\n super(system);\r\n this._drawBuffersExtension = drawBuffersExt;\r\n this._instancingExtension = instancingExt;\r\n }\r\n\r\n public setDrawBuffers(attachments: GLenum[]): void {\r\n // NB: The WEBGL_draw_buffers member is not exported directly because that type name is not available in some contexts (e.g. test-imodel-service).\r\n if (undefined !== this._drawBuffersExtension)\r\n this._drawBuffersExtension.drawBuffersWEBGL(attachments);\r\n }\r\n\r\n public vertexAttribDivisor(index: number, divisor: number): void {\r\n assert(undefined !== this._instancingExtension);\r\n this._instancingExtension.vertexAttribDivisorANGLE(index, divisor);\r\n }\r\n\r\n public drawArraysInst(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void {\r\n if (undefined !== this._instancingExtension) {\r\n this._instancingExtension.drawArraysInstancedANGLE(type, first, count, numInstances);\r\n }\r\n }\r\n\r\n public invalidateFrameBuffer(_attachments: number[]): void { } // does not exist in WebGL1\r\n}\r\n\r\n/** Describes WebGL2 extension methods.\r\n * @internal\r\n */\r\nclass WebGL2Extensions extends WebGLExtensions {\r\n private _context: WebGL2RenderingContext;\r\n public constructor(system: System) {\r\n super(system);\r\n this._context = system.context as WebGL2RenderingContext;\r\n }\r\n\r\n public setDrawBuffers(attachments: GLenum[]): void {\r\n this._context.drawBuffers(attachments);\r\n }\r\n\r\n public vertexAttribDivisor(index: number, divisor: number): void {\r\n this._context.vertexAttribDivisor(index, divisor);\r\n }\r\n\r\n public drawArraysInst(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void { this._context.drawArraysInstanced(type, first, count, numInstances); }\r\n\r\n public invalidateFrameBuffer(attachments: number[]): void {\r\n this._context.invalidateFramebuffer(this._context.FRAMEBUFFER, attachments);\r\n }\r\n}\r\n\r\n/** Id map holds key value pairs for both materials and textures, useful for caching such objects.\r\n * @internal\r\n */\r\nexport class IdMap implements WebGLDisposable {\r\n private readonly _iModel: IModelConnection;\r\n /** Mapping of materials by their key values. */\r\n public readonly materials = new Map<string, RenderMaterial>();\r\n /** Mapping of textures by their key values. */\r\n public readonly textures = new Map<string, RenderTexture>();\r\n /** Mapping of textures using gradient symbology. */\r\n public readonly gradients = new Dictionary<Gradient.Symb, RenderTexture>(Gradient.Symb.compareSymb);\r\n /** Pending promises to create a texture from an ImageSource. This prevents us from decoding the same ImageSource multiple times */\r\n public readonly texturesFromImageSources = new Map<string, Promise<RenderTexture | undefined>>();\r\n\r\n public constructor(iModel: IModelConnection) {\r\n this._iModel = iModel;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return 0 === this.textures.size && 0 === this.gradients.size;\r\n }\r\n\r\n public dispose() {\r\n const textureArr = Array.from(this.textures.values());\r\n const gradientArr = this.gradients.extractArrays().values;\r\n\r\n for (const texture of textureArr)\r\n dispose(texture);\r\n\r\n for (const gradient of gradientArr)\r\n dispose(gradient);\r\n\r\n this.textures.clear();\r\n this.gradients.clear();\r\n this.materials.clear();\r\n }\r\n\r\n /** Add a material to this IdMap, given that it has a valid key. */\r\n public addMaterial(material: RenderMaterial) {\r\n if (material.key)\r\n this.materials.set(material.key, material);\r\n }\r\n\r\n /** Add a texture to this IdMap, given that it has a valid string key. If specified, it will instead use the key parameter, which could also be a gradient symb. */\r\n public addTexture(texture: RenderTexture, key?: TextureCacheKey) {\r\n assert(texture instanceof Texture);\r\n if (undefined !== key) {\r\n if (\"string\" === typeof key)\r\n this.textures.set(key, texture);\r\n else\r\n this.addGradient(key, texture);\r\n } else if (texture.key)\r\n this.textures.set(texture.key, texture);\r\n }\r\n\r\n /** Add a texture to this IdMap using gradient symbology. */\r\n public addGradient(gradientSymb: Gradient.Symb, texture: RenderTexture) {\r\n this.gradients.set(gradientSymb, texture);\r\n }\r\n\r\n /** Find a cached material using its key. If not found, returns undefined. */\r\n public findMaterial(key: string): RenderMaterial | undefined {\r\n return this.materials.get(key);\r\n }\r\n\r\n /** Find a cached gradient using the gradient symbology. If not found, returns undefined. */\r\n public findGradient(symb: Gradient.Symb): RenderTexture | undefined {\r\n return this.gradients.get(symb);\r\n }\r\n\r\n /** Find or create a new material given material parameters. This will cache the material if its key is valid. */\r\n public getMaterial(params: RenderMaterial.Params): RenderMaterial {\r\n if (!params.key || !Id64.isValidId64(params.key)) // Only cache persistent materials.\r\n return new Material(params);\r\n\r\n let material = this.materials.get(params.key);\r\n if (!material) {\r\n material = new Material(params);\r\n this.materials.set(params.key, material);\r\n }\r\n return material;\r\n }\r\n\r\n public findTexture(key?: string | Gradient.Symb): RenderTexture | undefined {\r\n if (undefined === key)\r\n return undefined;\r\n else if (typeof key === \"string\")\r\n return this.textures.get(key);\r\n else\r\n return this.findGradient(key);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public getTextureFromElement(key: Id64String, iModel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\r\n let tex = this.findTexture(params.key);\r\n if (tex)\r\n return tex;\r\n\r\n const handle = TextureHandle.createForElement(key, iModel, params.type, format);\r\n if (!handle)\r\n return undefined;\r\n\r\n tex = new Texture({ handle, type: params.type, ownership: { key, iModel } });\r\n this.addTexture(tex);\r\n return tex;\r\n }\r\n\r\n public async getTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\r\n const texture = this.findTexture(key);\r\n if (texture)\r\n return texture;\r\n\r\n // Are we already in the process of decoding this image?\r\n let promise = this.texturesFromImageSources.get(key);\r\n if (promise)\r\n return promise;\r\n\r\n promise = this.createTextureFromImageSource(args, key);\r\n this.texturesFromImageSources.set(key, promise);\r\n return promise;\r\n }\r\n\r\n public async createTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\r\n // JPEGs don't support transparency.\r\n const transparency = ImageSourceFormat.Jpeg === args.source.format ? TextureTransparency.Opaque : (args.transparency ?? TextureTransparency.Translucent);\r\n try {\r\n const image = await imageElementFromImageSource(args.source);\r\n if (!IModelApp.hasRenderSystem)\r\n return undefined;\r\n\r\n return IModelApp.renderSystem.createTexture({\r\n type: args.type,\r\n ownership: args.ownership,\r\n image: {\r\n source: image,\r\n transparency,\r\n },\r\n });\r\n } catch {\r\n return undefined;\r\n } finally {\r\n this.texturesFromImageSources.delete(key);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public getTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, params: RenderTexture.Params): RenderTexture | undefined {\r\n let tex = this.findTexture(params.key);\r\n if (tex)\r\n return tex;\r\n\r\n const handle = TextureHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\r\n if (!handle)\r\n return undefined;\r\n\r\n const ownership = params.key ? { key: params.key, iModel: this._iModel } : (params.isOwned ? \"external\" : undefined);\r\n tex = new Texture({ handle, ownership, type: params.type });\r\n this.addTexture(tex);\r\n return tex;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n for (const texture of this.textures.values())\r\n if (texture instanceof Texture)\r\n stats.addTexture(texture.bytesUsed);\r\n\r\n for (const gradient of this.gradients)\r\n if (gradient instanceof Texture)\r\n stats.addTexture(gradient.bytesUsed);\r\n }\r\n}\r\n\r\nexport type TextureBinding = WebGLTexture | undefined;\r\n\r\nconst enum VertexAttribState {\r\n Disabled = 0,\r\n Enabled = 1 << 0,\r\n Instanced = 1 << 2,\r\n InstancedEnabled = Instanced | Enabled,\r\n}\r\n\r\ninterface TextureCacheInfo {\r\n idMap: IdMap;\r\n key: TextureCacheKey;\r\n}\r\n\r\n/** @internal */\r\nexport class System extends RenderSystem implements RenderSystemDebugControl, RenderMemory.Consumer, WebGLDisposable {\r\n public readonly canvas: HTMLCanvasElement;\r\n public readonly currentRenderState = new RenderState();\r\n public readonly context: WebGLContext;\r\n public readonly frameBufferStack = new FrameBufferStack(); // frame buffers are not owned by the system\r\n public readonly capabilities: Capabilities;\r\n public readonly resourceCache: Map<IModelConnection, IdMap>;\r\n public readonly glTimer: GLTimer;\r\n private readonly _extensions: WebGLExtensions;\r\n private readonly _textureBindings: TextureBinding[] = [];\r\n private _removeEventListener?: () => void;\r\n\r\n // NB: Increase the size of these arrays when the maximum number of attributes used by any one shader increases.\r\n private readonly _curVertexAttribStates: VertexAttribState[] = [\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n ];\r\n private readonly _nextVertexAttribStates: VertexAttribState[] = [\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n ];\r\n\r\n // The following are initialized immediately after the System is constructed.\r\n private _lineCodeTexture?: TextureHandle;\r\n private _noiseTexture?: TextureHandle;\r\n private _techniques?: Techniques;\r\n private _screenSpaceEffects?: ScreenSpaceEffects;\r\n public readonly debugShaderFiles: DebugShaderFile[] = [];\r\n\r\n public static get instance() { return IModelApp.renderSystem as System; }\r\n\r\n public get isValid(): boolean { return this.canvas !== undefined; }\r\n public get lineCodeTexture() { return this._lineCodeTexture; }\r\n public get noiseTexture() { return this._noiseTexture; }\r\n\r\n public get techniques() {\r\n assert(undefined !== this._techniques);\r\n return this._techniques;\r\n }\r\n\r\n public get screenSpaceEffects() {\r\n assert(undefined !== this._screenSpaceEffects);\r\n return this._screenSpaceEffects;\r\n }\r\n\r\n public override get maxTextureSize(): number { return this.capabilities.maxTextureSize; }\r\n public override get supportsInstancing(): boolean { return this.capabilities.supportsInstancing; }\r\n public override get supportsNonuniformScaledInstancing(): boolean { return this.capabilities.isWebGL2; }\r\n\r\n /** Requires gl_VertexID (WebGL 2 only) and > 8 texture units (WebGL 1 only guarantees 8). */\r\n public override get supportsIndexedEdges(): boolean { return this.isWebGL2; }\r\n public get isWebGL2(): boolean { return this.capabilities.isWebGL2; }\r\n public override get isMobile(): boolean { return this.capabilities.isMobile; }\r\n\r\n public setDrawBuffers(attachments: GLenum[]): void { this._extensions.setDrawBuffers(attachments); }\r\n\r\n public doIdleWork(): boolean {\r\n return this.techniques.idleCompileNextShader();\r\n }\r\n\r\n /** Return a Promise which when resolved indicates that all pending external textures have finished loading from the backend. */\r\n public override async waitForAllExternalTextures(): Promise<void> {\r\n const extTexLoader = ExternalTextureLoader.instance;\r\n if (extTexLoader.numActiveRequests < 1 && extTexLoader.numPendingRequests < 1)\r\n return Promise.resolve();\r\n const promise = new Promise<void>((resolve: any) => {\r\n extTexLoader.onTexturesLoaded.addOnce(() => {\r\n resolve();\r\n });\r\n });\r\n return promise;\r\n }\r\n\r\n /** Attempt to create a WebGLRenderingContext, returning undefined if unsuccessful. */\r\n public static createContext(canvas: HTMLCanvasElement, useWebGL2: boolean, inputContextAttributes?: WebGLContextAttributes): WebGLContext | undefined {\r\n let contextAttributes: WebGLContextAttributes = { powerPreference: \"high-performance\" };\r\n if (undefined !== inputContextAttributes) {\r\n // NOTE: Order matters with spread operator - if caller wants to override powerPreference, he should be able to.\r\n contextAttributes = { ...contextAttributes, ...inputContextAttributes };\r\n }\r\n\r\n // If requested, first try obtaining a WebGL2 context.\r\n let context = null;\r\n if (useWebGL2)\r\n context = canvas.getContext(\"webgl2\", contextAttributes);\r\n\r\n // Fall back to WebGL1 if necessary.\r\n if (null === context)\r\n context = canvas.getContext(\"webgl\", contextAttributes);\r\n\r\n return context ?? undefined;\r\n }\r\n\r\n public static create(optionsIn?: RenderSystem.Options): System {\r\n const options: RenderSystem.Options = undefined !== optionsIn ? optionsIn : {};\r\n const canvas = document.createElement(\"canvas\");\r\n if (null === canvas)\r\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain HTMLCanvasElement\");\r\n\r\n const useWebGL2 = (undefined === options.useWebGL2 ? true : options.useWebGL2);\r\n const context = this.createContext(canvas, useWebGL2, optionsIn?.contextAttributes);\r\n if (undefined === context) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain WebGL context\");\r\n }\r\n\r\n const capabilities = Capabilities.create(context, options.disabledExtensions);\r\n if (undefined === capabilities)\r\n throw new IModelError(BentleyStatus.ERROR, \"Failed to initialize rendering capabilities\");\r\n\r\n // set actual gl state to match desired state defaults\r\n context.depthFunc(GL.DepthFunc.Default); // LessOrEqual\r\n\r\n if (!capabilities.supportsShadowMaps)\r\n options.displaySolarShadows = false;\r\n if (!capabilities.supportsFragDepth)\r\n options.logarithmicDepthBuffer = false;\r\n if (!capabilities.supportsTextureFilterAnisotropic) {\r\n options.filterMapTextures = false;\r\n options.filterMapDrapeTextures = false;\r\n }\r\n return new this(canvas, context, capabilities, options);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._techniques\r\n && undefined === this._lineCodeTexture\r\n && undefined === this._noiseTexture\r\n && undefined === this._screenSpaceEffects;\r\n }\r\n\r\n // Note: FrameBuffers inside of the FrameBufferStack are not owned by the System, and are only used as a central storage device\r\n public dispose() {\r\n this._techniques = dispose(this._techniques);\r\n this._screenSpaceEffects = dispose(this._screenSpaceEffects);\r\n this._lineCodeTexture = dispose(this._lineCodeTexture);\r\n this._noiseTexture = dispose(this._noiseTexture);\r\n\r\n // We must attempt to dispose of each idmap in the resourceCache (if idmap is already disposed, has no effect)\r\n this.resourceCache.forEach((idMap: IdMap) => {\r\n dispose(idMap);\r\n });\r\n\r\n this.resourceCache.clear();\r\n if (undefined !== this._removeEventListener) {\r\n this._removeEventListener();\r\n this._removeEventListener = undefined;\r\n }\r\n }\r\n\r\n public override onInitialized(): void {\r\n this._techniques = Techniques.create(this.context);\r\n\r\n const noiseDim = 4;\r\n const noiseArr = new Uint8Array([152, 235, 94, 173, 219, 215, 115, 176, 73, 205, 43, 201, 10, 81, 205, 198]);\r\n this._noiseTexture = TextureHandle.createForData(noiseDim, noiseDim, noiseArr, false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\r\n assert(undefined !== this._noiseTexture, \"System.noiseTexture not created.\");\r\n\r\n this._lineCodeTexture = TextureHandle.createForData(LineCode.size, LineCode.count, new Uint8Array(LineCode.lineCodeData), false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\r\n assert(undefined !== this._lineCodeTexture, \"System.lineCodeTexture not created.\");\r\n\r\n this._screenSpaceEffects = new ScreenSpaceEffects();\r\n }\r\n\r\n public createTarget(canvas: HTMLCanvasElement): RenderTarget {\r\n return new OnScreenTarget(canvas);\r\n }\r\n\r\n public createOffscreenTarget(rect: ViewRect): RenderTarget {\r\n return new OffScreenTarget(rect);\r\n }\r\n\r\n public createGraphic(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions): GraphicBuilder {\r\n return new PrimitiveBuilder(this, options);\r\n }\r\n\r\n public override createPlanarGrid(frustum: Frustum, grid: PlanarGridProps): RenderGraphic | undefined {\r\n return PlanarGridGeometry.create(frustum, grid, this);\r\n }\r\n\r\n public override createRealityMeshFromTerrain(terrainMesh: TerrainMeshPrimitive, transform?: Transform): RealityMeshGeometry | undefined {\r\n return RealityMeshGeometry.createFromTerrainMesh(terrainMesh, transform);\r\n }\r\n\r\n public override createRealityMeshGraphic(terrainGeometry: RealityMeshGeometry, featureTable: PackedFeatureTable, tileId: string | undefined, baseColor: ColorDef | undefined, baseTransparent: boolean, textures?: TerrainTexture[]): RenderGraphic | undefined {\r\n return RealityMeshGeometry.createGraphic(this, terrainGeometry, featureTable, tileId, baseColor, baseTransparent, textures);\r\n }\r\n public override createRealityMesh(realityMesh: RealityMeshPrimitive): RenderGraphic | undefined {\r\n const geom = RealityMeshGeometry.createFromRealityMesh(realityMesh);\r\n return geom ? Primitive.create(geom) : undefined;\r\n }\r\n\r\n public override createMeshGeometry(params: MeshParams, viOrigin?: Point3d): MeshRenderGeometry | undefined {\r\n return MeshRenderGeometry.create(params, viOrigin);\r\n }\r\n\r\n public override createPolylineGeometry(params: PolylineParams, viOrigin?: Point3d): PolylineGeometry | undefined {\r\n return PolylineGeometry.create(params, viOrigin);\r\n }\r\n\r\n public override createPointStringGeometry(params: PointStringParams, viOrigin?: Point3d): PointStringGeometry | undefined {\r\n return PointStringGeometry.create(params, viOrigin);\r\n }\r\n\r\n public override createAreaPattern(params: PatternGraphicParams): PatternBuffers | undefined {\r\n return PatternBuffers.create(params);\r\n }\r\n\r\n public override createRenderGraphic(geometry: RenderGeometry, instances?: InstancedGraphicParams | RenderAreaPattern): RenderGraphic | undefined {\r\n if (!(geometry instanceof MeshRenderGeometry)) {\r\n if (geometry instanceof PolylineGeometry || geometry instanceof PointStringGeometry)\r\n return Primitive.create(geometry, instances);\r\n\r\n assert(false, \"Invalid RenderGeometry for System.createRenderGraphic\");\r\n return undefined;\r\n }\r\n\r\n assert(!instances || instances instanceof PatternBuffers || isInstancedGraphicParams(instances));\r\n return MeshGraphic.create(geometry, instances);\r\n }\r\n\r\n public override createPointCloud(args: PointCloudArgs): RenderGraphic | undefined {\r\n return Primitive.create(new PointCloudGeometry(args));\r\n }\r\n\r\n public createGraphicList(primitives: RenderGraphic[]): RenderGraphic {\r\n return new GraphicsArray(primitives);\r\n }\r\n\r\n public createGraphicBranch(branch: GraphicBranch, transform: Transform, options?: GraphicBranchOptions): RenderGraphic {\r\n return new Branch(branch, transform, undefined, options);\r\n }\r\n\r\n public override createAnimationTransformNode(graphic: RenderGraphic, nodeId: number): RenderGraphic {\r\n return new AnimationTransformBranch(graphic, nodeId);\r\n }\r\n\r\n public createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions): RenderGraphic {\r\n return new Batch(graphic, features, range, options);\r\n }\r\n\r\n public override createGraphicOwner(owned: RenderGraphic): RenderGraphicOwner {\r\n return new GraphicOwner(owned as Graphic);\r\n }\r\n\r\n public override createGraphicLayer(graphic: RenderGraphic, layerId: string) {\r\n return new Layer(graphic as Graphic, layerId);\r\n }\r\n\r\n public override createGraphicLayerContainer(graphic: RenderGraphic, drawAsOverlay: boolean, transparency: number, elevation: number) {\r\n return new LayerContainer(graphic as Graphic, drawAsOverlay, transparency, elevation);\r\n }\r\n\r\n public override createSkyBox(params: RenderSkyBoxParams): RenderGraphic | undefined {\r\n if (\"cube\" === params.type)\r\n return SkyCubePrimitive.create(SkyBoxQuadsGeometry.create(params.texture));\r\n\r\n return SkySpherePrimitive.create(SkySphereViewportQuadGeometry.createGeometry(params));\r\n }\r\n\r\n public override createScreenSpaceEffectBuilder(params: ScreenSpaceEffectBuilderParams): ScreenSpaceEffectBuilder {\r\n return createScreenSpaceEffectBuilder(params);\r\n }\r\n\r\n public applyRenderState(newState: RenderState) {\r\n newState.apply(this.currentRenderState);\r\n this.currentRenderState.copyFrom(newState);\r\n }\r\n\r\n public createDepthBuffer(width: number, height: number, numSamples: number = 1): DepthBuffer | undefined {\r\n // Note: The buffer/texture created here have ownership passed to the caller (system will not dispose of these)\r\n switch (this.capabilities.maxDepthType) {\r\n case DepthType.RenderBufferUnsignedShort16: {\r\n return RenderBuffer.create(width, height);\r\n }\r\n case DepthType.TextureUnsignedInt32: {\r\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthComponent, GL.Texture.DataType.UnsignedInt);\r\n }\r\n case DepthType.TextureUnsignedInt24Stencil8: {\r\n if (this.capabilities.isWebGL2) {\r\n if (numSamples > 1) {\r\n return RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.DEPTH24_STENCIL8, numSamples);\r\n } else {\r\n const context2 = this.context as WebGL2RenderingContext;\r\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthStencil, context2.UNSIGNED_INT_24_8);\r\n }\r\n } else {\r\n const dtExt: WEBGL_depth_texture | undefined = this.capabilities.queryExtensionObject<WEBGL_depth_texture>(\"WEBGL_depth_texture\");\r\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthStencil, dtExt!.UNSIGNED_INT_24_8_WEBGL);\r\n }\r\n }\r\n default: {\r\n assert(false);\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n /** Returns the corresponding IdMap for an IModelConnection. Creates a new one if it doesn't exist. */\r\n public createIModelMap(imodel: IModelConnection): IdMap {\r\n let idMap = this.resourceCache.get(imodel);\r\n if (!idMap) {\r\n idMap = new IdMap(imodel);\r\n this.resourceCache.set(imodel, idMap);\r\n }\r\n return idMap;\r\n }\r\n\r\n /** Removes an IModelConnection-IdMap pairing from the system's resource cache. */\r\n private removeIModelMap(imodel: IModelConnection) {\r\n const idMap = this.resourceCache.get(imodel);\r\n if (idMap === undefined)\r\n return;\r\n dispose(idMap);\r\n this.resourceCache.delete(imodel);\r\n }\r\n\r\n /** Attempt to create a material for the given iModel using a set of material parameters. */\r\n public override createMaterial(params: RenderMaterial.Params, imodel: IModelConnection): RenderMaterial | undefined {\r\n const idMap = this.getIdMap(imodel);\r\n const material = idMap.getMaterial(params);\r\n return material;\r\n }\r\n\r\n /** Using its key, search for an existing material of an open iModel. */\r\n public override findMaterial(key: string, imodel: IModelConnection): RenderMaterial | undefined {\r\n const idMap = this.resourceCache.get(imodel);\r\n if (!idMap)\r\n return undefined;\r\n return idMap.findMaterial(key);\r\n }\r\n\r\n private getTextureCacheInfo(args: CreateTextureArgs): TextureCacheInfo | undefined {\r\n const owner = undefined !== args.ownership && args.ownership !== \"external\" ? args.ownership : undefined;\r\n return owner ? { idMap: this.getIdMap(owner.iModel), key: owner.key } : undefined;\r\n }\r\n\r\n public override createTexture(args: CreateTextureArgs): RenderTexture | undefined {\r\n const info = this.getTextureCacheInfo(args);\r\n const existing = info?.idMap.findTexture(info?.key);\r\n if (existing)\r\n return existing;\r\n\r\n const type = args.type ?? RenderTexture.Type.Normal;\r\n const source = args.image.source;\r\n\r\n // ###TODO createForImageBuffer should take args.transparency.\r\n let handle;\r\n if (source instanceof ImageBuffer)\r\n handle = TextureHandle.createForImageBuffer(source, type); // ###TODO use transparency from args\r\n else\r\n handle = TextureHandle.createForImage(source, TextureTransparency.Opaque !== args.image.transparency, type);\r\n\r\n if (!handle)\r\n return undefined;\r\n\r\n const texture = new Texture({ handle, type, ownership: args.ownership });\r\n if (texture && info)\r\n info.idMap.addTexture(texture, info.key);\r\n\r\n return texture;\r\n }\r\n\r\n public override async createTextureFromSource(args: CreateTextureFromSourceArgs): Promise<RenderTexture | undefined> {\r\n if (typeof args.ownership !== \"object\")\r\n return super.createTextureFromSource(args);\r\n\r\n return this.getIdMap(args.ownership.iModel).getTextureFromImageSource(args, args.ownership.key);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public override createTextureFromElement(id: Id64String, imodel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\r\n return this.getIdMap(imodel).getTextureFromElement(id, imodel, params, format);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public override createTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, imodel: IModelConnection, params: RenderTexture.Params): RenderTexture | undefined {\r\n return this.getIdMap(imodel).getTextureFromCubeImages(posX, negX, posY, negY, posZ, negZ, params);\r\n }\r\n\r\n /** Attempt to create a texture using gradient symbology. */\r\n public override getGradientTexture(symb: Gradient.Symb, iModel?: IModelConnection): RenderTexture | undefined {\r\n const source = symb.getImage(0x100, 0x100);\r\n return this.createTexture({\r\n image: {\r\n source,\r\n transparency: ImageBufferFormat.Rgba === source.format ? TextureTransparency.Translucent : TextureTransparency.Opaque,\r\n },\r\n ownership: iModel ? { iModel, key: symb } : undefined,\r\n type: RenderTexture.Type.Normal,\r\n });\r\n }\r\n\r\n /** Using its key, search for an existing texture of an open iModel. */\r\n public override findTexture(key: TextureCacheKey, imodel: IModelConnection): RenderTexture | undefined {\r\n const idMap = this.resourceCache.get(imodel);\r\n if (!idMap)\r\n return undefined;\r\n\r\n return idMap.findTexture(key);\r\n }\r\n\r\n public override createClipVolume(clipVector: ClipVector): RenderClipVolume | undefined {\r\n return ClipVolume.create(clipVector);\r\n }\r\n public override createBackgroundMapDrape(drapedTree: TileTreeReference, mapTree: MapTileTreeReference) {\r\n return BackgroundMapDrape.create(drapedTree, mapTree);\r\n }\r\n\r\n protected constructor(canvas: HTMLCanvasElement, context: WebGLContext, capabilities: Capabilities, options: RenderSystem.Options) {\r\n super(options);\r\n this.canvas = canvas;\r\n this.context = context;\r\n this.capabilities = capabilities;\r\n this.resourceCache = new Map<IModelConnection, IdMap>();\r\n this.glTimer = GLTimer.create(this);\r\n if (capabilities.isWebGL2)\r\n this._extensions = new WebGL2Extensions(this);\r\n else {\r\n const drawBuffersExtension = capabilities.queryExtensionObject<WEBGL_draw_buffers>(\"WEBGL_draw_buffers\");\r\n const instancingExtension = capabilities.queryExtensionObject<ANGLE_instanced_arrays>(\"ANGLE_instanced_arrays\");\r\n this._extensions = new WebGL1Extensions(this, drawBuffersExtension, instancingExtension);\r\n }\r\n\r\n // Make this System a subscriber to the the IModelConnection onClose event\r\n this._removeEventListener = IModelConnection.onClose.addListener((imodel) => this.removeIModelMap(imodel));\r\n\r\n canvas.addEventListener(\"webglcontextlost\", async () => RenderSystem.contextLossHandler(), false);\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public getIdMap(imodel: IModelConnection): IdMap {\r\n const map = this.resourceCache.get(imodel);\r\n return undefined !== map ? map : this.createIModelMap(imodel);\r\n }\r\n\r\n private bindTexture(unit: TextureUnit, target: GL.Texture.Target, texture: TextureBinding, makeActive: boolean): void {\r\n const index = unit - TextureUnit.Zero;\r\n if (this._textureBindings[index] === texture) {\r\n if (makeActive)\r\n this.context.activeTexture(unit);\r\n\r\n return;\r\n }\r\n\r\n this._textureBindings[index] = texture;\r\n this.context.activeTexture(unit);\r\n this.context.bindTexture(target, undefined !== texture ? texture : null);\r\n }\r\n\r\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\r\n public bindTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, false); }\r\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\r\n public bindTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, false); }\r\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\r\n public activateTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, true); }\r\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\r\n public activateTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, true); }\r\n\r\n // Ensure *something* is bound to suppress 'no texture assigned to unit x' warnings.\r\n public ensureSamplerBound(uniform: UniformHandle, unit: TextureUnit): void {\r\n this.lineCodeTexture!.bindSampler(uniform, unit);\r\n }\r\n public override get maxRealityImageryLayers() { return Math.min(this.capabilities.maxFragTextureUnits, this.capabilities.maxVertTextureUnits) < 16 ? 3 : 6; }\r\n\r\n public disposeTexture(texture: WebGLTexture) {\r\n System.instance.context.deleteTexture(texture);\r\n for (let i = 0; i < this._textureBindings.length; i++) {\r\n if (this._textureBindings[i] === texture) {\r\n this._textureBindings[i] = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // System keeps track of current enabled state of vertex attribute arrays.\r\n // This prevents errors caused by leaving a vertex attrib array enabled after disposing of the buffer bound to it;\r\n // also prevents unnecessarily 'updating' the enabled state of a vertex attrib array when it hasn't actually changed.\r\n public enableVertexAttribArray(id: number, instanced: boolean): void {\r\n assert(id < this._nextVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\r\n assert(id < this._curVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\r\n\r\n this._nextVertexAttribStates[id] = instanced ? VertexAttribState.InstancedEnabled : VertexAttribState.Enabled;\r\n }\r\n\r\n public updateVertexAttribArrays(): void {\r\n const cur = this._curVertexAttribStates;\r\n const next = this._nextVertexAttribStates;\r\n const context = this.context;\r\n\r\n for (let i = 0; i < next.length; i++) {\r\n const oldState = cur[i];\r\n const newState = next[i];\r\n if (oldState !== newState) {\r\n // Update the enabled state if it changed.\r\n const wasEnabled = 0 !== (VertexAttribState.Enabled & oldState);\r\n const nowEnabled = 0 !== (VertexAttribState.Enabled & newState);\r\n if (wasEnabled !== nowEnabled) {\r\n if (nowEnabled) {\r\n context.enableVertexAttribArray(i);\r\n } else {\r\n context.disableVertexAttribArray(i);\r\n }\r\n }\r\n\r\n // Only update the divisor if the attribute is enabled.\r\n if (nowEnabled) {\r\n const wasInstanced = 0 !== (VertexAttribState.Instanced & oldState);\r\n const nowInstanced = 0 !== (VertexAttribState.Instanced & newState);\r\n if (wasInstanced !== nowInstanced) {\r\n this.vertexAttribDivisor(i, nowInstanced ? 1 : 0);\r\n }\r\n }\r\n\r\n cur[i] = newState;\r\n }\r\n\r\n // Set the attribute back to disabled, but preserve the divisor.\r\n next[i] &= ~VertexAttribState.Enabled;\r\n }\r\n }\r\n\r\n public vertexAttribDivisor(index: number, divisor: number) { this._extensions.vertexAttribDivisor(index, divisor); }\r\n\r\n public drawArrays(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void {\r\n if (0 !== numInstances) {\r\n this._extensions.drawArraysInst(type, first, count, numInstances);\r\n } else {\r\n this.context.drawArrays(type, first, count);\r\n }\r\n }\r\n\r\n public invalidateFrameBuffer(attachments: number[]): void { this._extensions.invalidateFrameBuffer(attachments); }\r\n\r\n public override enableDiagnostics(enable: RenderDiagnostics): void {\r\n Debug.printEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.DebugOutput);\r\n Debug.evaluateEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.WebGL);\r\n }\r\n\r\n // RenderSystemDebugControl\r\n public override get debugControl(): RenderSystemDebugControl { return this; }\r\n\r\n private _dpiAwareLOD?: boolean;\r\n public override get dpiAwareLOD(): boolean { return this._dpiAwareLOD ?? super.dpiAwareLOD; }\r\n public override set dpiAwareLOD(dpiAware: boolean) { this._dpiAwareLOD = dpiAware; }\r\n\r\n public loseContext(): boolean {\r\n const ext = this.capabilities.queryExtensionObject<WEBGL_lose_context>(\"WEBGL_lose_context\");\r\n if (undefined === ext)\r\n return false;\r\n\r\n ext.loseContext();\r\n return true;\r\n }\r\n\r\n public compileAllShaders(): boolean {\r\n return this.techniques.compileShaders();\r\n }\r\n\r\n public get isGLTimerSupported(): boolean { return this.glTimer.isSupported; }\r\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\r\n this.glTimer.resultsCallback = callback;\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._lineCodeTexture)\r\n stats.addTexture(this._lineCodeTexture.bytesUsed);\r\n\r\n if (undefined !== this._noiseTexture)\r\n stats.addTexture(this._noiseTexture.bytesUsed);\r\n\r\n for (const idMap of this.resourceCache.values())\r\n idMap.collectStatistics(stats);\r\n }\r\n\r\n public setMaxAnisotropy(max: number | undefined): void {\r\n this.capabilities.setMaxAnisotropy(max, this.context);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"System.js","sourceRoot":"","sources":["../../../../src/render/webgl/System.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, BentleyStatus, Dictionary, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { ClipVector, Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, ElementAlignedBox3d, Frustum, Gradient, ImageBuffer, ImageBufferFormat, ImageSourceFormat, IModelError, PackedFeatureTable, RenderMaterial, RenderTexture, TextureTransparency,\r\n} from \"@itwin/core-common\";\r\nimport { Capabilities, DepthType, WebGLContext } from \"@itwin/webgl-compatibility\";\r\nimport { imageElementFromImageSource } from \"../../ImageUtil\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { MapTileTreeReference, TileTreeReference } from \"../../tile/internal\";\r\nimport { ViewRect } from \"../../ViewRect\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"../GraphicBranch\";\r\nimport { BatchOptions, CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../GraphicBuilder\";\r\nimport { InstancedGraphicParams, PatternGraphicParams } from \"../InstancedGraphicParams\";\r\nimport { PrimitiveBuilder } from \"../primitives/geometry/GeometryListBuilder\";\r\nimport { RealityMeshPrimitive } from \"../primitives/mesh/RealityMeshPrimitive\";\r\nimport { TerrainMeshPrimitive } from \"../primitives/mesh/TerrainMeshPrimitive\";\r\nimport { PointCloudArgs } from \"../primitives/PointCloudPrimitive\";\r\nimport { MeshParams } from \"../primitives/VertexTable\";\r\nimport { PointStringParams } from \"../primitives/PointStringParams\";\r\nimport { PolylineParams } from \"../primitives/PolylineParams\";\r\nimport { RenderClipVolume } from \"../RenderClipVolume\";\r\nimport { RenderGraphic, RenderGraphicOwner } from \"../RenderGraphic\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { CreateTextureArgs, CreateTextureFromSourceArgs, TextureCacheKey } from \"../RenderTexture\";\r\nimport {\r\n DebugShaderFile, GLTimerResultCallback, PlanarGridProps, RenderAreaPattern, RenderDiagnostics, RenderGeometry, RenderSkyBoxParams,\r\n RenderSystem, RenderSystemDebugControl, TerrainTexture,\r\n} from \"../RenderSystem\";\r\nimport { RenderTarget } from \"../RenderTarget\";\r\nimport { ScreenSpaceEffectBuilder, ScreenSpaceEffectBuilderParams } from \"../ScreenSpaceEffectBuilder\";\r\nimport { BackgroundMapDrape } from \"./BackgroundMapDrape\";\r\nimport { SkyBoxQuadsGeometry, SkySphereViewportQuadGeometry } from \"./CachedGeometry\";\r\nimport { ClipVolume } from \"./ClipVolume\";\r\nimport { isInstancedGraphicParams, PatternBuffers } from \"./InstancedGeometry\";\r\nimport { Debug } from \"./Diagnostics\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DepthBuffer, FrameBufferStack } from \"./FrameBuffer\";\r\nimport { GL } from \"./GL\";\r\nimport { GLTimer } from \"./GLTimer\";\r\nimport { AnimationTransformBranch, Batch, Branch, Graphic, GraphicOwner, GraphicsArray } from \"./Graphic\";\r\nimport { Layer, LayerContainer } from \"./Layer\";\r\nimport { LineCode } from \"./LineCode\";\r\nimport { Material } from \"./Material\";\r\nimport { MeshGraphic, MeshRenderGeometry } from \"./Mesh\";\r\nimport { PointCloudGeometry } from \"./PointCloud\";\r\nimport { PointStringGeometry } from \"./PointString\";\r\nimport { PolylineGeometry } from \"./Polyline\";\r\nimport { Primitive, SkyCubePrimitive, SkySpherePrimitive } from \"./Primitive\";\r\nimport { RenderBuffer, RenderBufferMultiSample } from \"./RenderBuffer\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { RenderState } from \"./RenderState\";\r\nimport { createScreenSpaceEffectBuilder, ScreenSpaceEffects } from \"./ScreenSpaceEffect\";\r\nimport { OffScreenTarget, OnScreenTarget } from \"./Target\";\r\nimport { Techniques } from \"./Technique\";\r\nimport { RealityMeshGeometry } from \"./RealityMesh\";\r\nimport { ExternalTextureLoader, Texture, TextureHandle } from \"./Texture\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { PlanarGridGeometry } from \"./PlanarGrid\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport const enum ContextState {\r\n Uninitialized,\r\n Success,\r\n Error,\r\n}\r\n\r\n/** Describes WebGL extension methods.\r\n * @internal\r\n */\r\nabstract class WebGLExtensions {\r\n private _system: System;\r\n public constructor(system: System) {\r\n this._system = system;\r\n }\r\n public get system() { return this._system; }\r\n public abstract setDrawBuffers(attachments: GLenum[]): void;\r\n public abstract vertexAttribDivisor(index: number, divisor: number): void;\r\n public abstract drawArraysInst(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void;\r\n public abstract invalidateFrameBuffer(_attachments: number[]): void;\r\n}\r\n\r\n/** Describes WebGL1 extension methods.\r\n * @internal\r\n */\r\nclass WebGL1Extensions extends WebGLExtensions {\r\n private readonly _drawBuffersExtension?: WEBGL_draw_buffers;\r\n private readonly _instancingExtension?: ANGLE_instanced_arrays;\r\n\r\n public constructor(system: System, drawBuffersExt: WEBGL_draw_buffers | undefined, instancingExt: ANGLE_instanced_arrays | undefined) {\r\n super(system);\r\n this._drawBuffersExtension = drawBuffersExt;\r\n this._instancingExtension = instancingExt;\r\n }\r\n\r\n public setDrawBuffers(attachments: GLenum[]): void {\r\n // NB: The WEBGL_draw_buffers member is not exported directly because that type name is not available in some contexts (e.g. test-imodel-service).\r\n if (undefined !== this._drawBuffersExtension)\r\n this._drawBuffersExtension.drawBuffersWEBGL(attachments);\r\n }\r\n\r\n public vertexAttribDivisor(index: number, divisor: number): void {\r\n assert(undefined !== this._instancingExtension);\r\n this._instancingExtension.vertexAttribDivisorANGLE(index, divisor);\r\n }\r\n\r\n public drawArraysInst(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void {\r\n if (undefined !== this._instancingExtension) {\r\n this._instancingExtension.drawArraysInstancedANGLE(type, first, count, numInstances);\r\n }\r\n }\r\n\r\n public invalidateFrameBuffer(_attachments: number[]): void { } // does not exist in WebGL1\r\n}\r\n\r\n/** Describes WebGL2 extension methods.\r\n * @internal\r\n */\r\nclass WebGL2Extensions extends WebGLExtensions {\r\n private _context: WebGL2RenderingContext;\r\n public constructor(system: System) {\r\n super(system);\r\n this._context = system.context as WebGL2RenderingContext;\r\n }\r\n\r\n public setDrawBuffers(attachments: GLenum[]): void {\r\n this._context.drawBuffers(attachments);\r\n }\r\n\r\n public vertexAttribDivisor(index: number, divisor: number): void {\r\n this._context.vertexAttribDivisor(index, divisor);\r\n }\r\n\r\n public drawArraysInst(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void { this._context.drawArraysInstanced(type, first, count, numInstances); }\r\n\r\n public invalidateFrameBuffer(attachments: number[]): void {\r\n this._context.invalidateFramebuffer(this._context.FRAMEBUFFER, attachments);\r\n }\r\n}\r\n\r\n/** Id map holds key value pairs for both materials and textures, useful for caching such objects.\r\n * @internal\r\n */\r\nexport class IdMap implements WebGLDisposable {\r\n private readonly _iModel: IModelConnection;\r\n /** Mapping of materials by their key values. */\r\n public readonly materials = new Map<string, RenderMaterial>();\r\n /** Mapping of textures by their key values. */\r\n public readonly textures = new Map<string, RenderTexture>();\r\n /** Mapping of textures using gradient symbology. */\r\n public readonly gradients = new Dictionary<Gradient.Symb, RenderTexture>(Gradient.Symb.compareSymb);\r\n /** Pending promises to create a texture from an ImageSource. This prevents us from decoding the same ImageSource multiple times */\r\n public readonly texturesFromImageSources = new Map<string, Promise<RenderTexture | undefined>>();\r\n\r\n public constructor(iModel: IModelConnection) {\r\n this._iModel = iModel;\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return 0 === this.textures.size && 0 === this.gradients.size;\r\n }\r\n\r\n public dispose() {\r\n const textureArr = Array.from(this.textures.values());\r\n const gradientArr = this.gradients.extractArrays().values;\r\n\r\n for (const texture of textureArr)\r\n dispose(texture);\r\n\r\n for (const gradient of gradientArr)\r\n dispose(gradient);\r\n\r\n this.textures.clear();\r\n this.gradients.clear();\r\n this.materials.clear();\r\n }\r\n\r\n /** Add a material to this IdMap, given that it has a valid key. */\r\n public addMaterial(material: RenderMaterial) {\r\n if (material.key)\r\n this.materials.set(material.key, material);\r\n }\r\n\r\n /** Add a texture to this IdMap, given that it has a valid string key. If specified, it will instead use the key parameter, which could also be a gradient symb. */\r\n public addTexture(texture: RenderTexture, key?: TextureCacheKey) {\r\n assert(texture instanceof Texture);\r\n if (undefined !== key) {\r\n if (\"string\" === typeof key)\r\n this.textures.set(key, texture);\r\n else\r\n this.addGradient(key, texture);\r\n } else if (texture.key)\r\n this.textures.set(texture.key, texture);\r\n }\r\n\r\n /** Add a texture to this IdMap using gradient symbology. */\r\n public addGradient(gradientSymb: Gradient.Symb, texture: RenderTexture) {\r\n this.gradients.set(gradientSymb, texture);\r\n }\r\n\r\n /** Find a cached material using its key. If not found, returns undefined. */\r\n public findMaterial(key: string): RenderMaterial | undefined {\r\n return this.materials.get(key);\r\n }\r\n\r\n /** Find a cached gradient using the gradient symbology. If not found, returns undefined. */\r\n public findGradient(symb: Gradient.Symb): RenderTexture | undefined {\r\n return this.gradients.get(symb);\r\n }\r\n\r\n /** Find or create a new material given material parameters. This will cache the material if its key is valid. */\r\n public getMaterial(params: RenderMaterial.Params): RenderMaterial {\r\n if (!params.key || !Id64.isValidId64(params.key)) // Only cache persistent materials.\r\n return new Material(params);\r\n\r\n let material = this.materials.get(params.key);\r\n if (!material) {\r\n material = new Material(params);\r\n this.materials.set(params.key, material);\r\n }\r\n return material;\r\n }\r\n\r\n public findTexture(key?: string | Gradient.Symb): RenderTexture | undefined {\r\n if (undefined === key)\r\n return undefined;\r\n else if (typeof key === \"string\")\r\n return this.textures.get(key);\r\n else\r\n return this.findGradient(key);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public getTextureFromElement(key: Id64String, iModel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\r\n let tex = this.findTexture(params.key);\r\n if (tex)\r\n return tex;\r\n\r\n const handle = TextureHandle.createForElement(key, iModel, params.type, format, (_, data) => {\r\n if (tex) {\r\n assert(tex instanceof Texture);\r\n tex.transparency = data.transparency ?? TextureTransparency.Mixed;\r\n }\r\n });\r\n\r\n if (!handle)\r\n return undefined;\r\n\r\n tex = new Texture({ handle, type: params.type, ownership: { key, iModel }, transparency: TextureTransparency.Opaque });\r\n this.addTexture(tex);\r\n return tex;\r\n }\r\n\r\n public async getTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\r\n const texture = this.findTexture(key);\r\n if (texture)\r\n return texture;\r\n\r\n // Are we already in the process of decoding this image?\r\n let promise = this.texturesFromImageSources.get(key);\r\n if (promise)\r\n return promise;\r\n\r\n promise = this.createTextureFromImageSource(args, key);\r\n this.texturesFromImageSources.set(key, promise);\r\n return promise;\r\n }\r\n\r\n public async createTextureFromImageSource(args: CreateTextureFromSourceArgs, key: string): Promise<RenderTexture | undefined> {\r\n // JPEGs don't support transparency.\r\n const transparency = ImageSourceFormat.Jpeg === args.source.format ? TextureTransparency.Opaque : (args.transparency ?? TextureTransparency.Mixed);\r\n try {\r\n const image = await imageElementFromImageSource(args.source);\r\n if (!IModelApp.hasRenderSystem)\r\n return undefined;\r\n\r\n return IModelApp.renderSystem.createTexture({\r\n type: args.type,\r\n ownership: args.ownership,\r\n image: {\r\n source: image,\r\n transparency,\r\n },\r\n });\r\n } catch {\r\n return undefined;\r\n } finally {\r\n this.texturesFromImageSources.delete(key);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public getTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, params: RenderTexture.Params): RenderTexture | undefined {\r\n let tex = this.findTexture(params.key);\r\n if (tex)\r\n return tex;\r\n\r\n const handle = TextureHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\r\n if (!handle)\r\n return undefined;\r\n\r\n const ownership = params.key ? { key: params.key, iModel: this._iModel } : (params.isOwned ? \"external\" : undefined);\r\n tex = new Texture({ handle, ownership, type: params.type, transparency: TextureTransparency.Opaque });\r\n this.addTexture(tex);\r\n return tex;\r\n }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n for (const texture of this.textures.values())\r\n if (texture instanceof Texture)\r\n stats.addTexture(texture.bytesUsed);\r\n\r\n for (const gradient of this.gradients)\r\n if (gradient instanceof Texture)\r\n stats.addTexture(gradient.bytesUsed);\r\n }\r\n}\r\n\r\nexport type TextureBinding = WebGLTexture | undefined;\r\n\r\nconst enum VertexAttribState {\r\n Disabled = 0,\r\n Enabled = 1 << 0,\r\n Instanced = 1 << 2,\r\n InstancedEnabled = Instanced | Enabled,\r\n}\r\n\r\ninterface TextureCacheInfo {\r\n idMap: IdMap;\r\n key: TextureCacheKey;\r\n}\r\n\r\n/** @internal */\r\nexport class System extends RenderSystem implements RenderSystemDebugControl, RenderMemory.Consumer, WebGLDisposable {\r\n public readonly canvas: HTMLCanvasElement;\r\n public readonly currentRenderState = new RenderState();\r\n public readonly context: WebGLContext;\r\n public readonly frameBufferStack = new FrameBufferStack(); // frame buffers are not owned by the system\r\n public readonly capabilities: Capabilities;\r\n public readonly resourceCache: Map<IModelConnection, IdMap>;\r\n public readonly glTimer: GLTimer;\r\n private readonly _extensions: WebGLExtensions;\r\n private readonly _textureBindings: TextureBinding[] = [];\r\n private _removeEventListener?: () => void;\r\n\r\n // NB: Increase the size of these arrays when the maximum number of attributes used by any one shader increases.\r\n private readonly _curVertexAttribStates: VertexAttribState[] = [\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n ];\r\n private readonly _nextVertexAttribStates: VertexAttribState[] = [\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled, VertexAttribState.Disabled,\r\n ];\r\n\r\n // The following are initialized immediately after the System is constructed.\r\n private _lineCodeTexture?: TextureHandle;\r\n private _noiseTexture?: TextureHandle;\r\n private _techniques?: Techniques;\r\n private _screenSpaceEffects?: ScreenSpaceEffects;\r\n public readonly debugShaderFiles: DebugShaderFile[] = [];\r\n\r\n public static get instance() { return IModelApp.renderSystem as System; }\r\n\r\n public get isValid(): boolean { return this.canvas !== undefined; }\r\n public get lineCodeTexture() { return this._lineCodeTexture; }\r\n public get noiseTexture() { return this._noiseTexture; }\r\n\r\n public get techniques() {\r\n assert(undefined !== this._techniques);\r\n return this._techniques;\r\n }\r\n\r\n public get screenSpaceEffects() {\r\n assert(undefined !== this._screenSpaceEffects);\r\n return this._screenSpaceEffects;\r\n }\r\n\r\n public override get maxTextureSize(): number { return this.capabilities.maxTextureSize; }\r\n public override get supportsInstancing(): boolean { return this.capabilities.supportsInstancing; }\r\n public override get supportsNonuniformScaledInstancing(): boolean { return this.capabilities.isWebGL2; }\r\n\r\n /** Requires gl_VertexID (WebGL 2 only) and > 8 texture units (WebGL 1 only guarantees 8). */\r\n public override get supportsIndexedEdges(): boolean { return this.isWebGL2; }\r\n public get isWebGL2(): boolean { return this.capabilities.isWebGL2; }\r\n public override get isMobile(): boolean { return this.capabilities.isMobile; }\r\n\r\n public setDrawBuffers(attachments: GLenum[]): void { this._extensions.setDrawBuffers(attachments); }\r\n\r\n public doIdleWork(): boolean {\r\n return this.techniques.idleCompileNextShader();\r\n }\r\n\r\n /** Return a Promise which when resolved indicates that all pending external textures have finished loading from the backend. */\r\n public override async waitForAllExternalTextures(): Promise<void> {\r\n const extTexLoader = ExternalTextureLoader.instance;\r\n if (extTexLoader.numActiveRequests < 1 && extTexLoader.numPendingRequests < 1)\r\n return Promise.resolve();\r\n const promise = new Promise<void>((resolve: any) => {\r\n extTexLoader.onTexturesLoaded.addOnce(() => {\r\n resolve();\r\n });\r\n });\r\n return promise;\r\n }\r\n\r\n /** Attempt to create a WebGLRenderingContext, returning undefined if unsuccessful. */\r\n public static createContext(canvas: HTMLCanvasElement, useWebGL2: boolean, inputContextAttributes?: WebGLContextAttributes): WebGLContext | undefined {\r\n let contextAttributes: WebGLContextAttributes = { powerPreference: \"high-performance\" };\r\n if (undefined !== inputContextAttributes) {\r\n // NOTE: Order matters with spread operator - if caller wants to override powerPreference, he should be able to.\r\n contextAttributes = { ...contextAttributes, ...inputContextAttributes };\r\n }\r\n\r\n // If requested, first try obtaining a WebGL2 context.\r\n let context = null;\r\n if (useWebGL2)\r\n context = canvas.getContext(\"webgl2\", contextAttributes);\r\n\r\n // Fall back to WebGL1 if necessary.\r\n if (null === context)\r\n context = canvas.getContext(\"webgl\", contextAttributes);\r\n\r\n return context ?? undefined;\r\n }\r\n\r\n public static create(optionsIn?: RenderSystem.Options): System {\r\n const options: RenderSystem.Options = undefined !== optionsIn ? optionsIn : {};\r\n const canvas = document.createElement(\"canvas\");\r\n if (null === canvas)\r\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain HTMLCanvasElement\");\r\n\r\n const useWebGL2 = (undefined === options.useWebGL2 ? true : options.useWebGL2);\r\n const context = this.createContext(canvas, useWebGL2, optionsIn?.contextAttributes);\r\n if (undefined === context) {\r\n throw new IModelError(BentleyStatus.ERROR, \"Failed to obtain WebGL context\");\r\n }\r\n\r\n const capabilities = Capabilities.create(context, options.disabledExtensions);\r\n if (undefined === capabilities)\r\n throw new IModelError(BentleyStatus.ERROR, \"Failed to initialize rendering capabilities\");\r\n\r\n // set actual gl state to match desired state defaults\r\n context.depthFunc(GL.DepthFunc.Default); // LessOrEqual\r\n\r\n if (!capabilities.supportsShadowMaps)\r\n options.displaySolarShadows = false;\r\n if (!capabilities.supportsFragDepth)\r\n options.logarithmicDepthBuffer = false;\r\n if (!capabilities.supportsTextureFilterAnisotropic) {\r\n options.filterMapTextures = false;\r\n options.filterMapDrapeTextures = false;\r\n }\r\n return new this(canvas, context, capabilities, options);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._techniques\r\n && undefined === this._lineCodeTexture\r\n && undefined === this._noiseTexture\r\n && undefined === this._screenSpaceEffects;\r\n }\r\n\r\n // Note: FrameBuffers inside of the FrameBufferStack are not owned by the System, and are only used as a central storage device\r\n public dispose() {\r\n this._techniques = dispose(this._techniques);\r\n this._screenSpaceEffects = dispose(this._screenSpaceEffects);\r\n this._lineCodeTexture = dispose(this._lineCodeTexture);\r\n this._noiseTexture = dispose(this._noiseTexture);\r\n\r\n // We must attempt to dispose of each idmap in the resourceCache (if idmap is already disposed, has no effect)\r\n this.resourceCache.forEach((idMap: IdMap) => {\r\n dispose(idMap);\r\n });\r\n\r\n this.resourceCache.clear();\r\n if (undefined !== this._removeEventListener) {\r\n this._removeEventListener();\r\n this._removeEventListener = undefined;\r\n }\r\n }\r\n\r\n public override onInitialized(): void {\r\n this._techniques = Techniques.create(this.context);\r\n\r\n const noiseDim = 4;\r\n const noiseArr = new Uint8Array([152, 235, 94, 173, 219, 215, 115, 176, 73, 205, 43, 201, 10, 81, 205, 198]);\r\n this._noiseTexture = TextureHandle.createForData(noiseDim, noiseDim, noiseArr, false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\r\n assert(undefined !== this._noiseTexture, \"System.noiseTexture not created.\");\r\n\r\n this._lineCodeTexture = TextureHandle.createForData(LineCode.size, LineCode.count, new Uint8Array(LineCode.lineCodeData), false, GL.Texture.WrapMode.Repeat, GL.Texture.Format.Luminance);\r\n assert(undefined !== this._lineCodeTexture, \"System.lineCodeTexture not created.\");\r\n\r\n this._screenSpaceEffects = new ScreenSpaceEffects();\r\n }\r\n\r\n public createTarget(canvas: HTMLCanvasElement): RenderTarget {\r\n return new OnScreenTarget(canvas);\r\n }\r\n\r\n public createOffscreenTarget(rect: ViewRect): RenderTarget {\r\n return new OffScreenTarget(rect);\r\n }\r\n\r\n public createGraphic(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions): GraphicBuilder {\r\n return new PrimitiveBuilder(this, options);\r\n }\r\n\r\n public override createPlanarGrid(frustum: Frustum, grid: PlanarGridProps): RenderGraphic | undefined {\r\n return PlanarGridGeometry.create(frustum, grid, this);\r\n }\r\n\r\n public override createRealityMeshFromTerrain(terrainMesh: TerrainMeshPrimitive, transform?: Transform): RealityMeshGeometry | undefined {\r\n return RealityMeshGeometry.createFromTerrainMesh(terrainMesh, transform);\r\n }\r\n\r\n public override createRealityMeshGraphic(terrainGeometry: RealityMeshGeometry, featureTable: PackedFeatureTable, tileId: string | undefined, baseColor: ColorDef | undefined, baseTransparent: boolean, textures?: TerrainTexture[]): RenderGraphic | undefined {\r\n return RealityMeshGeometry.createGraphic(this, terrainGeometry, featureTable, tileId, baseColor, baseTransparent, textures);\r\n }\r\n public override createRealityMesh(realityMesh: RealityMeshPrimitive): RenderGraphic | undefined {\r\n const geom = RealityMeshGeometry.createFromRealityMesh(realityMesh);\r\n return geom ? Primitive.create(geom) : undefined;\r\n }\r\n\r\n public override createMeshGeometry(params: MeshParams, viOrigin?: Point3d): MeshRenderGeometry | undefined {\r\n return MeshRenderGeometry.create(params, viOrigin);\r\n }\r\n\r\n public override createPolylineGeometry(params: PolylineParams, viOrigin?: Point3d): PolylineGeometry | undefined {\r\n return PolylineGeometry.create(params, viOrigin);\r\n }\r\n\r\n public override createPointStringGeometry(params: PointStringParams, viOrigin?: Point3d): PointStringGeometry | undefined {\r\n return PointStringGeometry.create(params, viOrigin);\r\n }\r\n\r\n public override createAreaPattern(params: PatternGraphicParams): PatternBuffers | undefined {\r\n return PatternBuffers.create(params);\r\n }\r\n\r\n public override createRenderGraphic(geometry: RenderGeometry, instances?: InstancedGraphicParams | RenderAreaPattern): RenderGraphic | undefined {\r\n if (!(geometry instanceof MeshRenderGeometry)) {\r\n if (geometry instanceof PolylineGeometry || geometry instanceof PointStringGeometry)\r\n return Primitive.create(geometry, instances);\r\n\r\n assert(false, \"Invalid RenderGeometry for System.createRenderGraphic\");\r\n return undefined;\r\n }\r\n\r\n assert(!instances || instances instanceof PatternBuffers || isInstancedGraphicParams(instances));\r\n return MeshGraphic.create(geometry, instances);\r\n }\r\n\r\n public override createPointCloud(args: PointCloudArgs): RenderGraphic | undefined {\r\n return Primitive.create(new PointCloudGeometry(args));\r\n }\r\n\r\n public createGraphicList(primitives: RenderGraphic[]): RenderGraphic {\r\n return new GraphicsArray(primitives);\r\n }\r\n\r\n public createGraphicBranch(branch: GraphicBranch, transform: Transform, options?: GraphicBranchOptions): RenderGraphic {\r\n return new Branch(branch, transform, undefined, options);\r\n }\r\n\r\n public override createAnimationTransformNode(graphic: RenderGraphic, nodeId: number): RenderGraphic {\r\n return new AnimationTransformBranch(graphic, nodeId);\r\n }\r\n\r\n public createBatch(graphic: RenderGraphic, features: PackedFeatureTable, range: ElementAlignedBox3d, options?: BatchOptions): RenderGraphic {\r\n return new Batch(graphic, features, range, options);\r\n }\r\n\r\n public override createGraphicOwner(owned: RenderGraphic): RenderGraphicOwner {\r\n return new GraphicOwner(owned as Graphic);\r\n }\r\n\r\n public override createGraphicLayer(graphic: RenderGraphic, layerId: string) {\r\n return new Layer(graphic as Graphic, layerId);\r\n }\r\n\r\n public override createGraphicLayerContainer(graphic: RenderGraphic, drawAsOverlay: boolean, transparency: number, elevation: number) {\r\n return new LayerContainer(graphic as Graphic, drawAsOverlay, transparency, elevation);\r\n }\r\n\r\n public override createSkyBox(params: RenderSkyBoxParams): RenderGraphic | undefined {\r\n if (\"cube\" === params.type)\r\n return SkyCubePrimitive.create(SkyBoxQuadsGeometry.create(params.texture));\r\n\r\n return SkySpherePrimitive.create(SkySphereViewportQuadGeometry.createGeometry(params));\r\n }\r\n\r\n public override createScreenSpaceEffectBuilder(params: ScreenSpaceEffectBuilderParams): ScreenSpaceEffectBuilder {\r\n return createScreenSpaceEffectBuilder(params);\r\n }\r\n\r\n public applyRenderState(newState: RenderState) {\r\n newState.apply(this.currentRenderState);\r\n this.currentRenderState.copyFrom(newState);\r\n }\r\n\r\n public createDepthBuffer(width: number, height: number, numSamples: number = 1): DepthBuffer | undefined {\r\n // Note: The buffer/texture created here have ownership passed to the caller (system will not dispose of these)\r\n switch (this.capabilities.maxDepthType) {\r\n case DepthType.RenderBufferUnsignedShort16: {\r\n return RenderBuffer.create(width, height);\r\n }\r\n case DepthType.TextureUnsignedInt32: {\r\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthComponent, GL.Texture.DataType.UnsignedInt);\r\n }\r\n case DepthType.TextureUnsignedInt24Stencil8: {\r\n if (this.capabilities.isWebGL2) {\r\n if (numSamples > 1) {\r\n return RenderBufferMultiSample.create(width, height, WebGL2RenderingContext.DEPTH24_STENCIL8, numSamples);\r\n } else {\r\n const context2 = this.context as WebGL2RenderingContext;\r\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthStencil, context2.UNSIGNED_INT_24_8);\r\n }\r\n } else {\r\n const dtExt: WEBGL_depth_texture | undefined = this.capabilities.queryExtensionObject<WEBGL_depth_texture>(\"WEBGL_depth_texture\");\r\n return TextureHandle.createForAttachment(width, height, GL.Texture.Format.DepthStencil, dtExt!.UNSIGNED_INT_24_8_WEBGL);\r\n }\r\n }\r\n default: {\r\n assert(false);\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n /** Returns the corresponding IdMap for an IModelConnection. Creates a new one if it doesn't exist. */\r\n public createIModelMap(imodel: IModelConnection): IdMap {\r\n let idMap = this.resourceCache.get(imodel);\r\n if (!idMap) {\r\n idMap = new IdMap(imodel);\r\n this.resourceCache.set(imodel, idMap);\r\n }\r\n return idMap;\r\n }\r\n\r\n /** Removes an IModelConnection-IdMap pairing from the system's resource cache. */\r\n private removeIModelMap(imodel: IModelConnection) {\r\n const idMap = this.resourceCache.get(imodel);\r\n if (idMap === undefined)\r\n return;\r\n dispose(idMap);\r\n this.resourceCache.delete(imodel);\r\n }\r\n\r\n /** Attempt to create a material for the given iModel using a set of material parameters. */\r\n public override createMaterial(params: RenderMaterial.Params, imodel: IModelConnection): RenderMaterial | undefined {\r\n const idMap = this.getIdMap(imodel);\r\n const material = idMap.getMaterial(params);\r\n return material;\r\n }\r\n\r\n /** Using its key, search for an existing material of an open iModel. */\r\n public override findMaterial(key: string, imodel: IModelConnection): RenderMaterial | undefined {\r\n const idMap = this.resourceCache.get(imodel);\r\n if (!idMap)\r\n return undefined;\r\n return idMap.findMaterial(key);\r\n }\r\n\r\n private getTextureCacheInfo(args: CreateTextureArgs): TextureCacheInfo | undefined {\r\n const owner = undefined !== args.ownership && args.ownership !== \"external\" ? args.ownership : undefined;\r\n return owner ? { idMap: this.getIdMap(owner.iModel), key: owner.key } : undefined;\r\n }\r\n\r\n public override createTexture(args: CreateTextureArgs): RenderTexture | undefined {\r\n const info = this.getTextureCacheInfo(args);\r\n const existing = info?.idMap.findTexture(info?.key);\r\n if (existing)\r\n return existing;\r\n\r\n const type = args.type ?? RenderTexture.Type.Normal;\r\n const source = args.image.source;\r\n\r\n let handle;\r\n if (source instanceof ImageBuffer)\r\n handle = TextureHandle.createForImageBuffer(source, type);\r\n else\r\n handle = TextureHandle.createForImage(source, type);\r\n\r\n if (!handle)\r\n return undefined;\r\n\r\n const texture = new Texture({ handle, type, ownership: args.ownership, transparency: args.image.transparency ?? TextureTransparency.Mixed });\r\n if (texture && info)\r\n info.idMap.addTexture(texture, info.key);\r\n\r\n return texture;\r\n }\r\n\r\n public override async createTextureFromSource(args: CreateTextureFromSourceArgs): Promise<RenderTexture | undefined> {\r\n if (typeof args.ownership !== \"object\")\r\n return super.createTextureFromSource(args);\r\n\r\n return this.getIdMap(args.ownership.iModel).getTextureFromImageSource(args, args.ownership.key);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public override createTextureFromElement(id: Id64String, imodel: IModelConnection, params: RenderTexture.Params, format: ImageSourceFormat): RenderTexture | undefined {\r\n return this.getIdMap(imodel).getTextureFromElement(id, imodel, params, format);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public override createTextureFromCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement, imodel: IModelConnection, params: RenderTexture.Params): RenderTexture | undefined {\r\n return this.getIdMap(imodel).getTextureFromCubeImages(posX, negX, posY, negY, posZ, negZ, params);\r\n }\r\n\r\n /** Attempt to create a texture using gradient symbology. */\r\n public override getGradientTexture(symb: Gradient.Symb, iModel?: IModelConnection): RenderTexture | undefined {\r\n const source = symb.getImage(0x100, 0x100);\r\n return this.createTexture({\r\n image: {\r\n source,\r\n transparency: ImageBufferFormat.Rgba === source.format ? TextureTransparency.Mixed : TextureTransparency.Opaque,\r\n },\r\n ownership: iModel ? { iModel, key: symb } : undefined,\r\n type: RenderTexture.Type.Normal,\r\n });\r\n }\r\n\r\n /** Using its key, search for an existing texture of an open iModel. */\r\n public override findTexture(key: TextureCacheKey, imodel: IModelConnection): RenderTexture | undefined {\r\n const idMap = this.resourceCache.get(imodel);\r\n if (!idMap)\r\n return undefined;\r\n\r\n return idMap.findTexture(key);\r\n }\r\n\r\n public override createClipVolume(clipVector: ClipVector): RenderClipVolume | undefined {\r\n return ClipVolume.create(clipVector);\r\n }\r\n public override createBackgroundMapDrape(drapedTree: TileTreeReference, mapTree: MapTileTreeReference) {\r\n return BackgroundMapDrape.create(drapedTree, mapTree);\r\n }\r\n\r\n protected constructor(canvas: HTMLCanvasElement, context: WebGLContext, capabilities: Capabilities, options: RenderSystem.Options) {\r\n super(options);\r\n this.canvas = canvas;\r\n this.context = context;\r\n this.capabilities = capabilities;\r\n this.resourceCache = new Map<IModelConnection, IdMap>();\r\n this.glTimer = GLTimer.create(this);\r\n if (capabilities.isWebGL2)\r\n this._extensions = new WebGL2Extensions(this);\r\n else {\r\n const drawBuffersExtension = capabilities.queryExtensionObject<WEBGL_draw_buffers>(\"WEBGL_draw_buffers\");\r\n const instancingExtension = capabilities.queryExtensionObject<ANGLE_instanced_arrays>(\"ANGLE_instanced_arrays\");\r\n this._extensions = new WebGL1Extensions(this, drawBuffersExtension, instancingExtension);\r\n }\r\n\r\n // Make this System a subscriber to the the IModelConnection onClose event\r\n this._removeEventListener = IModelConnection.onClose.addListener((imodel) => this.removeIModelMap(imodel));\r\n\r\n canvas.addEventListener(\"webglcontextlost\", async () => RenderSystem.contextLossHandler(), false);\r\n }\r\n\r\n /** Exposed strictly for tests. */\r\n public getIdMap(imodel: IModelConnection): IdMap {\r\n const map = this.resourceCache.get(imodel);\r\n return undefined !== map ? map : this.createIModelMap(imodel);\r\n }\r\n\r\n private bindTexture(unit: TextureUnit, target: GL.Texture.Target, texture: TextureBinding, makeActive: boolean): void {\r\n const index = unit - TextureUnit.Zero;\r\n if (this._textureBindings[index] === texture) {\r\n if (makeActive)\r\n this.context.activeTexture(unit);\r\n\r\n return;\r\n }\r\n\r\n this._textureBindings[index] = texture;\r\n this.context.activeTexture(unit);\r\n this.context.bindTexture(target, undefined !== texture ? texture : null);\r\n }\r\n\r\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\r\n public bindTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, false); }\r\n /** Bind the specified texture to the specified unit. This may *or may not* make the texture *active* */\r\n public bindTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, false); }\r\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\r\n public activateTexture2d(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.TwoDee, texture, true); }\r\n /** Bind the specified texture to the specified unit. This *always* makes the texture *active* */\r\n public activateTextureCubeMap(unit: TextureUnit, texture: TextureBinding) { this.bindTexture(unit, GL.Texture.Target.CubeMap, texture, true); }\r\n\r\n // Ensure *something* is bound to suppress 'no texture assigned to unit x' warnings.\r\n public ensureSamplerBound(uniform: UniformHandle, unit: TextureUnit): void {\r\n this.lineCodeTexture!.bindSampler(uniform, unit);\r\n }\r\n public override get maxRealityImageryLayers() { return Math.min(this.capabilities.maxFragTextureUnits, this.capabilities.maxVertTextureUnits) < 16 ? 3 : 6; }\r\n\r\n public disposeTexture(texture: WebGLTexture) {\r\n System.instance.context.deleteTexture(texture);\r\n for (let i = 0; i < this._textureBindings.length; i++) {\r\n if (this._textureBindings[i] === texture) {\r\n this._textureBindings[i] = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // System keeps track of current enabled state of vertex attribute arrays.\r\n // This prevents errors caused by leaving a vertex attrib array enabled after disposing of the buffer bound to it;\r\n // also prevents unnecessarily 'updating' the enabled state of a vertex attrib array when it hasn't actually changed.\r\n public enableVertexAttribArray(id: number, instanced: boolean): void {\r\n assert(id < this._nextVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\r\n assert(id < this._curVertexAttribStates.length, \"if you add new vertex attributes you must update array length\");\r\n\r\n this._nextVertexAttribStates[id] = instanced ? VertexAttribState.InstancedEnabled : VertexAttribState.Enabled;\r\n }\r\n\r\n public updateVertexAttribArrays(): void {\r\n const cur = this._curVertexAttribStates;\r\n const next = this._nextVertexAttribStates;\r\n const context = this.context;\r\n\r\n for (let i = 0; i < next.length; i++) {\r\n const oldState = cur[i];\r\n const newState = next[i];\r\n if (oldState !== newState) {\r\n // Update the enabled state if it changed.\r\n const wasEnabled = 0 !== (VertexAttribState.Enabled & oldState);\r\n const nowEnabled = 0 !== (VertexAttribState.Enabled & newState);\r\n if (wasEnabled !== nowEnabled) {\r\n if (nowEnabled) {\r\n context.enableVertexAttribArray(i);\r\n } else {\r\n context.disableVertexAttribArray(i);\r\n }\r\n }\r\n\r\n // Only update the divisor if the attribute is enabled.\r\n if (nowEnabled) {\r\n const wasInstanced = 0 !== (VertexAttribState.Instanced & oldState);\r\n const nowInstanced = 0 !== (VertexAttribState.Instanced & newState);\r\n if (wasInstanced !== nowInstanced) {\r\n this.vertexAttribDivisor(i, nowInstanced ? 1 : 0);\r\n }\r\n }\r\n\r\n cur[i] = newState;\r\n }\r\n\r\n // Set the attribute back to disabled, but preserve the divisor.\r\n next[i] &= ~VertexAttribState.Enabled;\r\n }\r\n }\r\n\r\n public vertexAttribDivisor(index: number, divisor: number) { this._extensions.vertexAttribDivisor(index, divisor); }\r\n\r\n public drawArrays(type: GL.PrimitiveType, first: number, count: number, numInstances: number): void {\r\n if (0 !== numInstances) {\r\n this._extensions.drawArraysInst(type, first, count, numInstances);\r\n } else {\r\n this.context.drawArrays(type, first, count);\r\n }\r\n }\r\n\r\n public invalidateFrameBuffer(attachments: number[]): void { this._extensions.invalidateFrameBuffer(attachments); }\r\n\r\n public override enableDiagnostics(enable: RenderDiagnostics): void {\r\n Debug.printEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.DebugOutput);\r\n Debug.evaluateEnabled = RenderDiagnostics.None !== (enable & RenderDiagnostics.WebGL);\r\n }\r\n\r\n // RenderSystemDebugControl\r\n public override get debugControl(): RenderSystemDebugControl { return this; }\r\n\r\n private _dpiAwareLOD?: boolean;\r\n public override get dpiAwareLOD(): boolean { return this._dpiAwareLOD ?? super.dpiAwareLOD; }\r\n public override set dpiAwareLOD(dpiAware: boolean) { this._dpiAwareLOD = dpiAware; }\r\n\r\n public loseContext(): boolean {\r\n const ext = this.capabilities.queryExtensionObject<WEBGL_lose_context>(\"WEBGL_lose_context\");\r\n if (undefined === ext)\r\n return false;\r\n\r\n ext.loseContext();\r\n return true;\r\n }\r\n\r\n public compileAllShaders(): boolean {\r\n return this.techniques.compileShaders();\r\n }\r\n\r\n public get isGLTimerSupported(): boolean { return this.glTimer.isSupported; }\r\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\r\n this.glTimer.resultsCallback = callback;\r\n }\r\n\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._lineCodeTexture)\r\n stats.addTexture(this._lineCodeTexture.bytesUsed);\r\n\r\n if (undefined !== this._noiseTexture)\r\n stats.addTexture(this._noiseTexture.bytesUsed);\r\n\r\n for (const idMap of this.resourceCache.values())\r\n idMap.collectStatistics(stats);\r\n }\r\n\r\n public setMaxAnisotropy(max: number | undefined): void {\r\n this.capabilities.setMaxAnisotropy(max, this.context);\r\n }\r\n}\r\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module WebGL
3
3
  */
4
4
  import { BeEvent, Id64String } from "@itwin/core-bentley";
5
- import { ImageBuffer, ImageSourceFormat, RenderTexture } from "@itwin/core-common";
5
+ import { ImageBuffer, ImageSourceFormat, RenderTexture, TextureData, TextureTransparency } from "@itwin/core-common";
6
6
  import { IModelConnection } from "../../IModelConnection";
7
7
  import { WebGLDisposable } from "./Disposable";
8
8
  import { GL } from "./GL";
@@ -18,6 +18,7 @@ declare type Load2DImageData = (handle: TextureHandle, params: Texture2DCreatePa
18
18
  export interface TextureParams {
19
19
  type: RenderTexture.Type;
20
20
  ownership?: TextureOwnership;
21
+ transparency: TextureTransparency;
21
22
  handle: TextureHandle;
22
23
  }
23
24
  /** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.
@@ -26,6 +27,7 @@ export interface TextureParams {
26
27
  export declare class Texture extends RenderTexture implements WebGLDisposable {
27
28
  readonly texture: TextureHandle;
28
29
  readonly ownership?: TextureOwnership;
30
+ transparency: TextureTransparency;
29
31
  get bytesUsed(): number;
30
32
  get hasOwner(): boolean;
31
33
  get key(): string | undefined;
@@ -51,8 +53,8 @@ declare class Texture2DCreateParams {
51
53
  static createForData(width: number, height: number, data: Texture2DData, preserveData?: boolean, wrapMode?: GL.Texture.WrapMode, format?: GL.Texture.Format): Texture2DCreateParams;
52
54
  static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type): Texture2DCreateParams;
53
55
  static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): Texture2DCreateParams;
54
- static createForImage(image: HTMLImageElement, hasAlpha: boolean, type: RenderTexture.Type): Texture2DCreateParams;
55
- static createForImageBitmap(image: ImageBitmap, hasAlpha: boolean, type: RenderTexture.Type): Texture2DCreateParams;
56
+ static createForImage(image: HTMLImageElement, type: RenderTexture.Type): Texture2DCreateParams;
57
+ static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type): Texture2DCreateParams;
56
58
  private static getImageProperties;
57
59
  static readonly placeholderParams: Texture2DCreateParams;
58
60
  }
@@ -84,12 +86,12 @@ export declare abstract class TextureHandle implements WebGLDisposable {
84
86
  /** Create a 2D texture from a bitmap */
85
87
  static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type): Texture2DHandle | undefined;
86
88
  /** Create a 2D texture from an HTMLImageElement. */
87
- static createForImage(image: HTMLImageElement, hasAlpha: boolean, type: RenderTexture.Type): Texture2DHandle | undefined;
89
+ static createForImage(image: HTMLImageElement, type: RenderTexture.Type): Texture2DHandle | undefined;
88
90
  /** Create a 2D texture from an ImageBitmap. */
89
- static createForImageBitmap(image: ImageBitmap, hasAlpha: boolean, type: RenderTexture.Type): Texture2DHandle | undefined;
91
+ static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type): Texture2DHandle | undefined;
90
92
  /** Create a cube map texture from six HTMLImageElement objects. */
91
93
  static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureHandle | undefined;
92
- static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat): Texture2DHandle | undefined;
94
+ static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback): Texture2DHandle | undefined;
93
95
  protected constructor(glTexture: WebGLTexture);
94
96
  /** For debugging purposes, open a new window containing this texture as an image. */
95
97
  showDebugImage(): void;
@@ -126,22 +128,24 @@ export declare class Texture2DHandle extends TextureHandle {
126
128
  /** Create a texture from a bitmap */
127
129
  static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type): Texture2DHandle | undefined;
128
130
  /** Create a 2D texture from an HTMLImageElement. */
129
- static createForImage(image: HTMLImageElement, hasAlpha: boolean, type: RenderTexture.Type): Texture2DHandle | undefined;
131
+ static createForImage(image: HTMLImageElement, type: RenderTexture.Type): Texture2DHandle | undefined;
130
132
  /** Create a 2D texture from an ImageBitmap. */
131
- static createForImageBitmap(image: ImageBitmap, hasAlpha: boolean, type: RenderTexture.Type): Texture2DHandle | undefined;
133
+ static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type): Texture2DHandle | undefined;
132
134
  private static _placeHolderTextureData;
133
- static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat): Texture2DHandle | undefined;
135
+ static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback): Texture2DHandle | undefined;
134
136
  reload(params: Texture2DCreateParams): void;
135
137
  private constructor();
136
138
  }
137
139
  /** @internal */
140
+ export declare type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;
141
+ /** @internal */
138
142
  export interface ExternalTextureRequest {
139
143
  handle: Texture2DHandle;
140
144
  name: Id64String;
141
145
  imodel: IModelConnection;
142
146
  type: RenderTexture.Type;
143
147
  format: ImageSourceFormat;
144
- onLoaded?: (req: ExternalTextureRequest) => void;
148
+ onLoaded?: ExternalTextureLoadCallback;
145
149
  }
146
150
  /** @internal */
147
151
  export declare class ExternalTextureLoader {
@@ -160,7 +164,7 @@ export declare class ExternalTextureLoader {
160
164
  private _activateRequest;
161
165
  private _convertTexture;
162
166
  private _requestExists;
163
- loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: (req: ExternalTextureRequest) => void): void;
167
+ loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback): void;
164
168
  }
165
169
  /** @internal */
166
170
  export declare class TextureCubeHandle extends TextureHandle {
@@ -1 +1 @@
1
- {"version":3,"file":"Texture.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/Texture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Texture.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/Texture.ts"],"names":[],"mappings":"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"}
@@ -104,6 +104,7 @@ class Texture extends core_common_1.RenderTexture {
104
104
  super(params.type);
105
105
  this.ownership = params.ownership;
106
106
  this.texture = params.handle;
107
+ this.transparency = params.handle.format === GL_1.GL.Texture.Format.Rgba ? params.transparency : core_common_1.TextureTransparency.Opaque;
107
108
  }
108
109
  get bytesUsed() { return this.texture.bytesUsed; }
109
110
  get hasOwner() { return undefined !== this.ownership; }
@@ -116,7 +117,7 @@ class Texture extends core_common_1.RenderTexture {
116
117
  dispose() {
117
118
  (0, core_bentley_1.dispose)(this.texture);
118
119
  }
119
- get hasTranslucency() { return GL_1.GL.Texture.Format.Rgba === this.texture.format; }
120
+ get hasTranslucency() { return core_common_1.TextureTransparency.Opaque !== this.transparency; }
120
121
  }
121
122
  exports.Texture = Texture;
122
123
  function getDataType(data) {
@@ -141,14 +142,16 @@ class Texture2DCreateParams {
141
142
  return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode, (tex, params) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);
142
143
  }
143
144
  static createForImageBuffer(image, type) {
144
- const props = this.getImageProperties(core_common_1.ImageBufferFormat.Rgba === image.format, type);
145
+ const props = this.getImageProperties(type);
146
+ if (core_common_1.ImageBufferFormat.Rgb === image.format)
147
+ props.format = GL_1.GL.Texture.Format.Rgb;
145
148
  return new Texture2DCreateParams(image.width, image.height, props.format, GL_1.GL.Texture.DataType.UnsignedByte, props.wrapMode, (tex, params) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);
146
149
  }
147
150
  static createForAttachment(width, height, format, dataType) {
148
151
  return new Texture2DCreateParams(width, height, format, dataType, GL_1.GL.Texture.WrapMode.ClampToEdge, (tex, params) => loadTextureFromBytes(tex, params), undefined, undefined);
149
152
  }
150
- static createForImage(image, hasAlpha, type) {
151
- const props = this.getImageProperties(hasAlpha, type);
153
+ static createForImage(image, type) {
154
+ const props = this.getImageProperties(type);
152
155
  let targetWidth = image.naturalWidth;
153
156
  let targetHeight = image.naturalHeight;
154
157
  const caps = System_1.System.instance.capabilities;
@@ -184,8 +187,8 @@ class Texture2DCreateParams {
184
187
  }
185
188
  return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL_1.GL.Texture.DataType.UnsignedByte, props.wrapMode, (tex, params) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);
186
189
  }
187
- static createForImageBitmap(image, hasAlpha, type) {
188
- const props = this.getImageProperties(hasAlpha, type);
190
+ static createForImageBitmap(image, type) {
191
+ const props = this.getImageProperties(type);
189
192
  let targetWidth = image.width;
190
193
  let targetHeight = image.height;
191
194
  const caps = System_1.System.instance.capabilities;
@@ -213,7 +216,7 @@ class Texture2DCreateParams {
213
216
  context.drawImage(image, 0, 0, canvas.width, canvas.height);
214
217
  return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL_1.GL.Texture.DataType.UnsignedByte, props.wrapMode, (tex, params) => loadTexture2DImageData(tex, params, undefined, canvas), props.useMipMaps, props.interpolate, props.anisotropicFilter);
215
218
  }
216
- static getImageProperties(isTranslucent, type) {
219
+ static getImageProperties(type) {
217
220
  const isSky = core_common_1.RenderTexture.Type.SkyBox === type;
218
221
  const isTile = core_common_1.RenderTexture.Type.TileSection === type;
219
222
  const isThematic = core_common_1.RenderTexture.Type.ThematicGradient === type;
@@ -222,8 +225,9 @@ class Texture2DCreateParams {
222
225
  const wrapMode = core_common_1.RenderTexture.Type.Normal === type ? GL_1.GL.Texture.WrapMode.Repeat : GL_1.GL.Texture.WrapMode.ClampToEdge;
223
226
  const useMipMaps = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;
224
227
  const interpolate = isThematic ? undefined : true;
225
- const format = isTranslucent ? GL_1.GL.Texture.Format.Rgba : GL_1.GL.Texture.Format.Rgb;
226
228
  const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;
229
+ // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.
230
+ const format = GL_1.GL.Texture.Format.Rgba;
227
231
  return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };
228
232
  }
229
233
  }
@@ -284,19 +288,19 @@ class TextureHandle {
284
288
  return Texture2DHandle.createForImageBuffer(image, type);
285
289
  }
286
290
  /** Create a 2D texture from an HTMLImageElement. */
287
- static createForImage(image, hasAlpha, type) {
288
- return Texture2DHandle.createForImage(image, hasAlpha, type);
291
+ static createForImage(image, type) {
292
+ return Texture2DHandle.createForImage(image, type);
289
293
  }
290
294
  /** Create a 2D texture from an ImageBitmap. */
291
- static createForImageBitmap(image, hasAlpha, type) {
292
- return Texture2DHandle.createForImageBitmap(image, hasAlpha, type);
295
+ static createForImageBitmap(image, type) {
296
+ return Texture2DHandle.createForImageBitmap(image, type);
293
297
  }
294
298
  /** Create a cube map texture from six HTMLImageElement objects. */
295
299
  static createForCubeImages(posX, negX, posY, negY, posZ, negZ) {
296
300
  return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);
297
301
  }
298
- static createForElement(id, imodel, type, format) {
299
- return Texture2DHandle.createForElement(id, imodel, type, format);
302
+ static createForElement(id, imodel, type, format, onLoaded) {
303
+ return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);
300
304
  }
301
305
  /** For debugging purposes, open a new window containing this texture as an image. */
302
306
  showDebugImage() {
@@ -400,20 +404,20 @@ class Texture2DHandle extends TextureHandle {
400
404
  return this.create(Texture2DCreateParams.createForImageBuffer(image, type));
401
405
  }
402
406
  /** Create a 2D texture from an HTMLImageElement. */
403
- static createForImage(image, hasAlpha, type) {
404
- return this.create(Texture2DCreateParams.createForImage(image, hasAlpha, type));
407
+ static createForImage(image, type) {
408
+ return this.create(Texture2DCreateParams.createForImage(image, type));
405
409
  }
406
410
  /** Create a 2D texture from an ImageBitmap. */
407
- static createForImageBitmap(image, hasAlpha, type) {
408
- return this.create(Texture2DCreateParams.createForImageBitmap(image, hasAlpha, type));
411
+ static createForImageBitmap(image, type) {
412
+ return this.create(Texture2DCreateParams.createForImageBitmap(image, type));
409
413
  }
410
- static createForElement(id, imodel, type, format) {
414
+ static createForElement(id, imodel, type, format, onLoaded) {
411
415
  // set a placeholder texture while we wait for the external texture to load
412
416
  const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL_1.GL.Texture.Format.Rgb);
413
417
  if (undefined === handle)
414
418
  return undefined;
415
419
  // kick off loading the texture from the backend
416
- ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format);
420
+ ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);
417
421
  return handle;
418
422
  }
419
423
  reload(params) {
@@ -469,7 +473,7 @@ class ExternalTextureLoader {
469
473
  if (!req.imodel.isClosed) {
470
474
  IModelApp_1.IModelApp.tileAdmin.invalidateAllScenes();
471
475
  if (undefined !== req.onLoaded)
472
- req.onLoaded(req);
476
+ req.onLoaded(req, texData);
473
477
  }
474
478
  }
475
479
  }
@@ -487,13 +491,13 @@ class ExternalTextureLoader {
487
491
  const blob = new Blob([imageSource.data], { type: (0, ImageUtil_1.getImageSourceMimeType)(imageSource.format) });
488
492
  const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);
489
493
  if (!cnvReq.req.imodel.isClosed) {
490
- cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, core_common_1.ImageSourceFormat.Png === cnvReq.req.format, cnvReq.req.type));
494
+ cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));
491
495
  }
492
496
  }
493
497
  else {
494
498
  const image = await (0, ImageUtil_1.imageElementFromImageSource)(imageSource);
495
499
  if (!cnvReq.req.imodel.isClosed) {
496
- cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, core_common_1.ImageSourceFormat.Png === cnvReq.req.format, cnvReq.req.type));
500
+ cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));
497
501
  }
498
502
  }
499
503
  }