@itwin/core-frontend 5.1.0-dev.65 → 5.1.0-dev.69

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 (109) hide show
  1. package/lib/cjs/common/gltf/GltfSchema.d.ts +9 -0
  2. package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
  3. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  4. package/lib/cjs/common/imdl/CompactEdges.d.ts +11 -0
  5. package/lib/cjs/common/imdl/CompactEdges.d.ts.map +1 -1
  6. package/lib/cjs/common/imdl/CompactEdges.js +9 -6
  7. package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
  8. package/lib/cjs/common/imdl/ImdlSchema.d.ts +5 -1
  9. package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
  10. package/lib/cjs/common/imdl/ImdlSchema.js +4 -0
  11. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  12. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  13. package/lib/cjs/common/imdl/ParseImdlDocument.js +11 -9
  14. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  15. package/lib/cjs/common/internal/render/EdgeParams.d.ts +7 -2
  16. package/lib/cjs/common/internal/render/EdgeParams.d.ts.map +1 -1
  17. package/lib/cjs/common/internal/render/EdgeParams.js +30 -8
  18. package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -1
  19. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts +2 -1
  20. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  21. package/lib/cjs/common/internal/render/MeshPrimitives.js +5 -7
  22. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  23. package/lib/cjs/common/internal/render/PolylineParams.d.ts +8 -3
  24. package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -1
  25. package/lib/cjs/common/internal/render/PolylineParams.js +6 -9
  26. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
  27. package/lib/cjs/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
  28. package/lib/cjs/common/internal/render/VertexTableSplitter.js +9 -7
  29. package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -1
  30. package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts +8 -6
  31. package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
  32. package/lib/cjs/internal/render/webgl/EdgeGeometry.js +21 -7
  33. package/lib/cjs/internal/render/webgl/EdgeGeometry.js.map +1 -1
  34. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
  35. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  36. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
  37. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  38. package/lib/cjs/internal/render/webgl/Mesh.d.ts +1 -1
  39. package/lib/cjs/internal/render/webgl/Mesh.d.ts.map +1 -1
  40. package/lib/cjs/internal/render/webgl/Mesh.js +13 -6
  41. package/lib/cjs/internal/render/webgl/Mesh.js.map +1 -1
  42. package/lib/cjs/internal/webgl.d.ts +1 -1
  43. package/lib/cjs/internal/webgl.d.ts.map +1 -1
  44. package/lib/cjs/internal/webgl.js.map +1 -1
  45. package/lib/cjs/quantity-formatting/QuantityFormatter.js +0 -2
  46. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  47. package/lib/cjs/render/MeshArgs.d.ts +8 -3
  48. package/lib/cjs/render/MeshArgs.d.ts.map +1 -1
  49. package/lib/cjs/render/MeshArgs.js.map +1 -1
  50. package/lib/cjs/tile/GltfReader.d.ts +1 -0
  51. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  52. package/lib/cjs/tile/GltfReader.js +68 -0
  53. package/lib/cjs/tile/GltfReader.js.map +1 -1
  54. package/lib/esm/common/gltf/GltfSchema.d.ts +9 -0
  55. package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
  56. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  57. package/lib/esm/common/imdl/CompactEdges.d.ts +11 -0
  58. package/lib/esm/common/imdl/CompactEdges.d.ts.map +1 -1
  59. package/lib/esm/common/imdl/CompactEdges.js +8 -6
  60. package/lib/esm/common/imdl/CompactEdges.js.map +1 -1
  61. package/lib/esm/common/imdl/ImdlSchema.d.ts +5 -1
  62. package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
  63. package/lib/esm/common/imdl/ImdlSchema.js +4 -0
  64. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  65. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  66. package/lib/esm/common/imdl/ParseImdlDocument.js +11 -9
  67. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  68. package/lib/esm/common/internal/render/EdgeParams.d.ts +7 -2
  69. package/lib/esm/common/internal/render/EdgeParams.d.ts.map +1 -1
  70. package/lib/esm/common/internal/render/EdgeParams.js +31 -9
  71. package/lib/esm/common/internal/render/EdgeParams.js.map +1 -1
  72. package/lib/esm/common/internal/render/MeshPrimitives.d.ts +2 -1
  73. package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  74. package/lib/esm/common/internal/render/MeshPrimitives.js +5 -7
  75. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  76. package/lib/esm/common/internal/render/PolylineParams.d.ts +8 -3
  77. package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -1
  78. package/lib/esm/common/internal/render/PolylineParams.js +5 -8
  79. package/lib/esm/common/internal/render/PolylineParams.js.map +1 -1
  80. package/lib/esm/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
  81. package/lib/esm/common/internal/render/VertexTableSplitter.js +9 -7
  82. package/lib/esm/common/internal/render/VertexTableSplitter.js.map +1 -1
  83. package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts +8 -6
  84. package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
  85. package/lib/esm/internal/render/webgl/EdgeGeometry.js +21 -7
  86. package/lib/esm/internal/render/webgl/EdgeGeometry.js.map +1 -1
  87. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
  88. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  89. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
  90. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  91. package/lib/esm/internal/render/webgl/Mesh.d.ts +1 -1
  92. package/lib/esm/internal/render/webgl/Mesh.d.ts.map +1 -1
  93. package/lib/esm/internal/render/webgl/Mesh.js +14 -7
  94. package/lib/esm/internal/render/webgl/Mesh.js.map +1 -1
  95. package/lib/esm/internal/webgl.d.ts +1 -1
  96. package/lib/esm/internal/webgl.d.ts.map +1 -1
  97. package/lib/esm/internal/webgl.js.map +1 -1
  98. package/lib/esm/quantity-formatting/QuantityFormatter.js +0 -2
  99. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  100. package/lib/esm/render/MeshArgs.d.ts +8 -3
  101. package/lib/esm/render/MeshArgs.d.ts.map +1 -1
  102. package/lib/esm/render/MeshArgs.js.map +1 -1
  103. package/lib/esm/tile/GltfReader.d.ts +1 -0
  104. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  105. package/lib/esm/tile/GltfReader.js +69 -1
  106. package/lib/esm/tile/GltfReader.js.map +1 -1
  107. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  108. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  109. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTableSplitter.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/VertexTableSplitter.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAwYH,wDAcC;AA4RD,0CAsCC;AAaD,kDAqDC;AAxxBD,sDAAoF;AACpF,oDAAkF;AAClF,6CAAkG;AAClG,+CAA+D;AAC/D,mDAAgD;AAChD,mDAAyE;AAazE;;;GAGG;AACH,MAAa,WAAW;IACL,QAAQ,CAAoB;IAC5B,QAAQ,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtE,YAAmB,eAAe,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,gCAAiB,CAAC,EAAE,eAAe,EAAE,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,IAAW,UAAU;QACnB,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,IAAI,CAAC,KAAa;QACvB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,6BAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IACzD,CAAC;CACF;AAtBD,kCAsBC;AAED,mCAAmC;AACnC,MAAM,YAAY;IACC,QAAQ,CAAqB;IAC7B,OAAO,CAAc;IAEtC,iHAAiH;IACjH,YAAmB,MAAmB;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,iCAAkB,CAAC,EAAE,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,qDAAqD;IACrD,IAAW,MAAM;QACf,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC;IAED,uEAAuE;IACvE,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACvC,CAAC;IAED,gEAAgE;IACzD,IAAI,CAAC,MAAmB;QAC7B,IAAA,qBAAM,EAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,2CAA2C;IACpC,gBAAgB,CAAC,YAAoB,EAAE,UAAkC,EAAE,kBAAsC;QACtH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC;QAC/C,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,CAAC,CAAC;QAEjC,MAAM,gBAAgB,GAAG,UAAU,YAAY,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,wBAAwB,GAAG,kBAAkB,YAAY,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,MAAM,UAAU,GAAG,IAAA,+BAAiB,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,gBAAgB,GAAG,wBAAwB,EAAE,YAAY,CAAC,CAAC;QAE9H,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC;YAC1B,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YACjE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,IAAI,UAAU,YAAY,WAAW,EAAE,CAAC;YACtC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACpC,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC;QACjC,CAAC;QAED,IAAI,kBAAkB,YAAY,WAAW;YAC3C,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;QAE9C,OAAO;YACL,IAAI,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;YAC/E,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;YACzD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,YAAY,EAAE,UAAU,YAAY,sBAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACrE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;CACF;AAID,kFAAkF;AAClF,MAAM,kBAAkB;IACL,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,WAAW,CAAc;IAC1B,MAAM,GAAa,EAAE,CAAC;IACrB,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExD,YAAmB,UAAuB;QACxC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,wIAAwI;IACjI,KAAK,CAAC,MAAmB,EAAE,wBAA6C;QAC7E,MAAM,SAAS,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,0CAA0C;IACnC,eAAe;QACpB,IAAA,qBAAM,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;CACF;AAMD,MAAM,qBAAqB;IACR,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,WAAW,CAAc;IACzB,eAAe,CAAuB;IACvC,SAAS,GAAa,EAAE,CAAC;IACxB,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtD,YAAmB,WAAwB,EAAE,cAAoC;QAC/E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAED,sIAAsI;IAC/H,KAAK,CAAC,MAAmB,EAAE,wBAA6C;QAC7E,MAAM,SAAS,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,IAAI,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QACtB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;QACtC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;QACnC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC;QACxD,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEO,sBAAsB,CAAC,KAAkB;QAC/C,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,IAAI,GAAmB;YAC3B,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9D,OAAO,EAAE;gBACP,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,sBAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;gBACzE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK;aAC1C;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,sBAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK;gBAC1C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACrC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,IAAA,qCAAqB,EAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,0CAA0C;IACnC,eAAe;QACpB,IAAA,qBAAM,EAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACF;AAED,qFAAqF;AACrF,MAAM,IAAI;IACQ,QAAQ,CAAe;IACvB,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAsB;IAC5B,KAAK,CAAyB;IAC9B,wBAAwB,CAAW;IAEnD,2IAA2I;IAC3I,YAAmB,WAAwB,EAAE,KAAiB;QAC5D,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,WAAW,CAAC,YAAY;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAE3K,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChG,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAqB,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QACpJ,CAAC;QAED,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC,wBAAwB,CAAC;IACvE,CAAC;IAEM,SAAS,CAAC,aAAqB,EAAE,MAAmB;QACzD,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAElD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEM,WAAW,CAAC,YAAoB,EAAE,eAAiC;QACxE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC;QAEpD,IAAI,QAAqC,CAAC;QAC1C,IAAI,aAAa,YAAY,WAAW,EAAE,CAAC;YACzC,MAAM,gBAAgB,GAAG,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrI,QAAQ,GAAG;gBACT,OAAO,EAAE,IAAI;gBACb,eAAe,EAAE,CAAC,eAAe,EAAE,OAAO,IAAI,eAAe,EAAE,eAAe,CAAC,IAAI,KAAK;gBACxF,cAAc,EAAE,CAAC,eAAe,EAAE,OAAO,IAAI,eAAe,EAAE,cAAc,CAAC,IAAI,KAAK;gBACtF,iBAAiB,EAAE,gBAAgB;gBACnC,YAAY,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;aACvC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,aAAa,CAAC;QAC3B,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,aAAa,CAAC;YACrG,QAAQ;SACT,CAAC;IACJ,CAAC;CACF;AAeD,MAAM,mBAAmB;IACN,MAAM,CAAuB;IAC7B,cAAc,CAAyB;IACvC,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;IAElD,YAAoB,KAA2B,EAAE,aAAqC;QACpF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAED,sGAAsG;IAC/F,MAAM,CAAC,KAAK,CAAC,MAA4B,EAAE,aAAqC;QACrF,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAChE,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAEO,KAAK;QACX,gGAAgG;QAChG,8CAA8C;QAC9C,MAAM,QAAQ,GAAG;YACf,YAAY,EAAE,CAAC,CAAC;YAChB,IAAI,EAAE,SAA4B;SACnC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;QAEzJ,IAAI,mBAAiC,CAAC;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,mBAAmB,GAAG,GAAG,EAAE;gBACzB,OAAO,WAAW,CAAC,CAAC,CAAC;sBACjB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;sBACrB,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9B,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,mBAAmB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QACrD,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxC,wEAAwE;YACxE,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;gBACpC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAE5C,iFAAiF;YACjF,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;YAC3C,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBAC3C,QAAQ,CAAC,YAAY,GAAG,YAAY,CAAC;gBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACjD,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,SAAS,KAAK,IAAI;oBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAExF,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACvB,CAAC;YAED,0CAA0C;YAC1C,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAcD;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,IAA0B;IAC/D,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC;QACtC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;QAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAWD,MAAM,qBAAqB;IACT,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAC5B,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAChC,oBAAoB,GAAG,IAAI,iCAAkB,EAAE,CAAC;CACjE;AAoBD,SAAS,UAAU,CAAC,GAAkB,EAAE,QAAgB,EAAE,KAAwB;IAChF,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YAClB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAChB,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAA,qBAAM,EAAC,KAAK,CAAC,CAAC;IACd,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAgC,EAAE,MAAkB,EAAE,KAAwB,EAAE,KAAiC;IAC1I,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG;QACN,OAAO;IAET,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnJ,IAAI,cAAc,CAAC;IACnB,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,IAAA,qBAAM,EAAC,SAAS,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;QACzC,cAAc,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChK,CAAC;IAED,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACzE,IAAA,qBAAM,EAAC,SAAS,KAAK,aAAa,CAAC,CAAC;YACpC,eAAe,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,aAAa,CAAC;YAEjE,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK;gBACR,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,GAAG,EAAG,CAAC,CAAC;YAE3C,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,CAAC,WAAW;oBACpB,KAAK,CAAC,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,EAAE,sBAAsB,EAAE,IAAI,iCAAkB,EAAE,EAAE,WAAW,EAAE,IAAI,iCAAkB,EAAE,EAAE,CAAC;gBAE9I,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;YACpE,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3B,KAAK,CAAC,QAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,EAAE,sBAAsB,EAAE,IAAI,iCAAkB,EAAE,EAAE,CAAC;YACpG,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAA,qBAAM,EAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;YAE/B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxD,CAAC;QAED,EAAE,aAAa,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAuB,EAAE,KAAwB,EAAE,KAAiC;IAC9G,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnJ,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpD,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACxC,IAAA,qBAAM,EAAC,SAAS,KAAK,SAAS,CAAC,CAAC;YAChC,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvE,IAAA,qBAAM,EAAC,SAAS,KAAK,YAAY,CAAC,CAAC;YAEnC,IAAI,YAAY,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvE,IAAA,qBAAM,EAAC,SAAS,KAAK,YAAY,CAAC,CAAC;YACnC,YAAY,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,YAAY,CAAC;YAE1D,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK;gBACR,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,GAAG,EAAG,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,CAAC,SAAS;gBAClB,KAAK,CAAC,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;YAEhD,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAClD,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,EAAE,aAAa,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAsB,EAAE,KAAwB,EAAE,KAAiC;IAC5G,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IACnC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;IAC1C,MAAM,wBAAwB,GAAG,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAE/E,SAAS,iBAAiB,CAAC,SAAiB;QAC1C,OAAO,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;YACvG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;IAED,SAAS,iBAAiB,CAAC,QAA4B,EAAE,MAAc,EAAE,MAAc;QACrF,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,gBAAgB,CAAC,SAAiB;QACzC,OAAO,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;YACvG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;YACjG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpI,CAAC;IAED,SAAS,gBAAgB,CAAC,MAA0B,EAAE,MAAc,EAAE,MAAc,EAAE,KAAa,EAAE,KAAa;QAChH,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO;QAChC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,aAAa,GAAG,EAA+B,CAAC;IACtD,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,UAAU,IAAI,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC;QAC7E,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC,CAAE,QAAQ;YACvC,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACpD,SAAS,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC,CAAE,cAAc;YACtB,SAAS,GAAG,wBAAwB,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACvE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK;gBACR,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,GAAG,EAAG,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,CAAC,OAAO;gBAChB,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,gCAAiB,EAAE,EAAE,WAAW,EAAE,IAAI,gCAAiB,EAAE,EAAE,CAAC;YAE3F,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC,CAAE,QAAQ;gBACvC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,CAAC,CAAC;gBACjC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC,CAAE,cAAc;gBACtB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,CAAC,CAAC;gBACjC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAA,qBAAM,EAAC,SAAS,KAAK,UAAU,CAAC,CAAC;gBACjC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAkB,EAAE,KAAwB,EAAE,YAAoB;IACpF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC/C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACpD,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,SAAS;QAClB,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,MAAM,CAAC,OAAO;QAChB,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,aAAa,CAAC,OAAO;YACjF,SAAS;QAEX,IAAI,SAAS,GAAG,EAA2B,CAAC;QAC5C,IAAI,WAAW,GAAG,EAA+B,CAAC;QAClD,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/D,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC;YACrE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,GAAG,IAAA,qCAAwB,EAAC,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;YAC/I,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,cAAc,GAAG,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,wBAAwB,GAAG,iBAAiB,CAAC,CAAC;YAE3G,MAAM,aAAa,GAAG,eAAe,GAAG,cAAc,CAAC;YACvD,WAAW,GAAG,IAAI,6BAAa,CAAC,IAAI,UAAU,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACxB,WAAW,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1C,SAAS,GAAG;gBACV,IAAI;gBACJ,KAAK;gBACL,MAAM;gBACN,WAAW,EAAE,eAAe;gBAC5B,iBAAiB;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;gBACzD,sBAAsB,EAAE,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,EAAE;aACrF,CAAC,CAAC,CAAC,SAAS;YACb,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE;gBAC5D,sBAAsB,EAAE,aAAa,CAAC,WAAW,CAAC,sBAAsB,CAAC,YAAY,EAAE;gBACvF,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,EAAE;aAClE,CAAC,CAAC,CAAC,SAAS;YACb,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE;gBAC1D,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE;gBAClE,oBAAoB,EAAE,aAAa,CAAC,SAAS,CAAC,oBAAoB,CAAC,YAAY,EAAE;aAClF,CAAC,CAAC,CAAC,SAAS;YACb,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/B,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD,gBAAgB;AAChB,SAAgB,eAAe,CAAC,IAAmB;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE7C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzC,MAAM,WAAW,GAAG,SAAS,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,MAAM,SAAS,GAAG,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvH,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC;QACtC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO;QACpC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS;KACV,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtG,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1G,MAAM,MAAM,GAAe;YACzB,QAAQ;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;gBAC9B,OAAO;gBACP,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;gBACxC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB;gBACtD,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;gBAClD,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;aAC3E;YACD,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,qCAAqC;YACrC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;SACrC,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD,gBAAgB;AAChB,SAAgB,mBAAmB,CAAC,IAAuB;IACzD,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC;QACtC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;QACrC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,EAAE,IAAI,CAAC,aAAa,CAA8B,CAAC;IAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnJ,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,EAA+B,CAAC;IACtD,KAAK,MAAM,SAAS,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,UAAU,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAoB,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC5D,IAAI,CAAC,oBAAoB,GAAG,IAAI,iCAAkB,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACnG,CAAC;iBAAM,CAAC;gBACN,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,YAAY,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvE,IAAA,qBAAM,EAAC,SAAS,KAAK,YAAY,CAAC,CAAC;YACnC,YAAY,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,YAAY,CAAC;YAC1D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QAED,EAAE,aAAa,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,SAAS,KAAK,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,MAAM,GAAmB;YAC7B,GAAG,IAAI,CAAC,MAAM;YACd,QAAQ;YACR,QAAQ,EAAE;gBACR,OAAO;gBACP,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;gBAC/C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;aAC/D;SACF,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { assert, Uint32ArrayBuilder, Uint8ArrayBuilder } from \"@itwin/core-bentley\";\nimport { ColorDef, RenderFeatureTable, RenderMaterial } from \"@itwin/core-common\";\nimport { calculateEdgeTableParams, EdgeParams, EdgeTable, IndexedEdgeParams } from \"./EdgeParams\";\nimport { computeDimensions, VertexTable } from \"./VertexTable\";\nimport { VertexIndices } from \"./VertexIndices\";\nimport { createSurfaceMaterial, SurfaceMaterial } from \"./SurfaceParams\";\nimport { MaterialParams } from \"../../render/MaterialParams\";\nimport { MeshParams } from \"./MeshParams\";\nimport { PointStringParams } from \"./PointStringParams\";\nimport { PolylineParams, TesselatedPolyline } from \"./PolylineParams\";\n\n/** @internal */\nexport interface VertexTableWithIndices {\n vertices: VertexTable;\n indices: VertexIndices;\n material?: SurfaceMaterial;\n}\n\n/** Builds up a [[VertexIndices]].\n * Exported strictly for tests.\n * @internal\n */\nexport class IndexBuffer {\n private readonly _builder: Uint8ArrayBuilder;\n private readonly _index32 = new Uint32Array(1);\n private readonly _index8 = new Uint8Array(this._index32.buffer, 0, 3);\n\n public constructor(initialCapacity = 3) {\n this._builder = new Uint8ArrayBuilder({ initialCapacity: initialCapacity * 3 });\n }\n\n public get numIndices(): number {\n assert((this._builder.length % 3) === 0);\n return this._builder.length / 3;\n }\n\n public push(index: number): void {\n this._index32[0] = index;\n this._builder.append(this._index8);\n }\n\n public toVertexIndices(): VertexIndices {\n return new VertexIndices(this._builder.toTypedArray());\n }\n}\n\n/** Builds up a [[VertexTable]]. */\nclass VertexBuffer {\n private readonly _builder: Uint32ArrayBuilder;\n private readonly _source: VertexTable;\n\n /** `source` is the original table containing the vertex data from which individual vertices will be obtained. */\n public constructor(source: VertexTable) {\n this._source = source;\n this._builder = new Uint32ArrayBuilder({ initialCapacity: 3 * source.numRgbaPerVertex });\n }\n\n /** The number of vertices currently in the table. */\n public get length(): number {\n assert((this._builder.length % this.vertexSize) === 0);\n return this._builder.length / this.vertexSize;\n }\n\n /** The number of 32-bit unsigned integers (RGBA values) per vertex. */\n public get vertexSize(): number {\n return this._source.numRgbaPerVertex;\n }\n\n /** Append a vertex. `vertex` must be of size [[vertexSize]]. */\n public push(vertex: Uint32Array): void {\n assert(vertex.length === this.vertexSize);\n this._builder.append(vertex);\n }\n\n /** Construct the finished vertex table. */\n public buildVertexTable(maxDimension: number, colorTable: ColorTable | undefined, materialAtlasTable: MaterialAtlasTable): VertexTable {\n const source = this._source;\n colorTable = colorTable ?? source.uniformColor;\n assert(undefined !== colorTable);\n\n const colorTableLength = colorTable instanceof Uint32Array ? colorTable.length : 0;\n const materialAtlasTableLength = materialAtlasTable instanceof Uint32Array ? materialAtlasTable.length : 0;\n const dimensions = computeDimensions(this.length, this.vertexSize, colorTableLength + materialAtlasTableLength, maxDimension);\n\n let rgbaData = this._builder.toTypedArray();\n if (dimensions.width * dimensions.height > rgbaData.length) {\n const prevData = rgbaData;\n rgbaData = new Uint32Array(dimensions.width * dimensions.height);\n rgbaData.set(prevData, 0);\n }\n\n let tableSize = this.vertexSize * this.length;\n if (colorTable instanceof Uint32Array) {\n rgbaData.set(colorTable, tableSize);\n tableSize += colorTable.length;\n }\n\n if (materialAtlasTable instanceof Uint32Array)\n rgbaData.set(materialAtlasTable, tableSize);\n\n return {\n data: new Uint8Array(rgbaData.buffer, rgbaData.byteOffset, rgbaData.byteLength),\n usesUnquantizedPositions: source.usesUnquantizedPositions,\n qparams: source.qparams,\n width: dimensions.width,\n height: dimensions.height,\n hasTranslucency: source.hasTranslucency,\n uniformColor: colorTable instanceof ColorDef ? colorTable : undefined,\n featureIndexType: source.featureIndexType,\n uniformFeatureID: source.uniformFeatureID,\n numVertices: this.length,\n numRgbaPerVertex: source.numRgbaPerVertex,\n uvParams: source.uvParams,\n };\n }\n}\n\ntype ColorTable = Uint32Array | ColorDef;\n\n/** Remaps portions of a source color table into a filtered target color table. */\nclass ColorTableRemapper {\n private readonly _remappedIndices = new Map<number, number>();\n private readonly _colorTable: Uint32Array;\n public readonly colors: number[] = [];\n private readonly _32 = new Uint32Array(1);\n private readonly _16 = new Uint16Array(this._32.buffer);\n\n public constructor(colorTable: Uint32Array) {\n this._colorTable = colorTable;\n }\n\n /** Extract the color index stored in `vertex`, ensure it is present in the remapped color table, and return its index in that table. */\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\n const vertIndex = usesUnquantizedPositions ? 4 : 1;\n const shortIndex = usesUnquantizedPositions ? 0 : 1;\n this._32[0] = vertex[vertIndex];\n const oldIndex = this._16[shortIndex];\n let newIndex = this._remappedIndices.get(oldIndex);\n if (undefined === newIndex) {\n newIndex = this.colors.length;\n this._remappedIndices.set(oldIndex, newIndex);\n const color = this._colorTable[oldIndex];\n this.colors.push(color);\n }\n\n this._16[shortIndex] = newIndex;\n vertex[vertIndex] = this._32[0];\n }\n\n /** Construct the finished color table. */\n public buildColorTable(): ColorTable {\n assert(this.colors.length > 0);\n return this.colors.length > 1 ? new Uint32Array(this.colors) : ColorDef.fromAbgr(this.colors[0]);\n }\n}\n\ntype MaterialAtlasTable = Uint32Array | SurfaceMaterial | undefined;\n\ntype CreateRenderMaterial = (args: MaterialParams) => RenderMaterial | undefined;\n\nclass MaterialAtlasRemapper {\n private readonly _remappedIndices = new Map<number, number>();\n private readonly _atlasTable: Uint32Array;\n private readonly _createMaterial: CreateRenderMaterial;\n public readonly materials: number[] = [];\n private readonly _32 = new Uint32Array(1);\n private readonly _8 = new Uint8Array(this._32.buffer);\n\n public constructor(_atlasTable: Uint32Array, createMaterial: CreateRenderMaterial) {\n this._atlasTable = _atlasTable;\n this._createMaterial = createMaterial;\n }\n\n /** Extract the mat index stored in `vertex`, ensure it is present in the remapped atlas table, and return its index in that table. */\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\n const vertIndex = usesUnquantizedPositions ? 3 : 2;\n this._32[0] = vertex[vertIndex];\n const oldIndex = this._8[3];\n let newIndex = this._remappedIndices.get(oldIndex);\n if (undefined === newIndex) {\n newIndex = this.materials.length / 4;\n this._remappedIndices.set(oldIndex, newIndex);\n let index = oldIndex * 4;\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index]);\n }\n\n this._8[3] = newIndex;\n vertex[vertIndex] = this._32[0];\n }\n\n private unpackFloat(value: number): number {\n this._32[0] = value;\n const valUint32 = this._32[0];\n const bias = 38.0;\n const temp = (valUint32 >>> 24) / 2.0;\n let exponent = Math.floor(temp);\n let sign = (temp - exponent) * 2.0;\n sign = -(sign * 2.0 - 1.0);\n const base = sign * (valUint32 & 0xffffff) / 16777216.0;\n exponent = exponent - bias;\n return base * Math.pow(10.0, exponent);\n }\n\n private materialFromAtlasEntry(entry: Uint32Array): SurfaceMaterial | undefined {\n const rgbOverridden = (entry[1] & 0x1000000) !== 0;\n const alphaOverridden = (entry[1] & 0x2000000) !== 0;\n const args: MaterialParams = {\n alpha: alphaOverridden ? (entry[0] >>> 24) / 255.0 : undefined,\n diffuse: {\n color: rgbOverridden ? ColorDef.fromTbgr(entry[0] & 0xffffff) : undefined,\n weight: ((entry[1] >>> 8) & 0xff) / 255.0,\n },\n specular: {\n color: ColorDef.fromTbgr(entry[2]),\n weight: ((entry[1] >>> 16) & 0xff) / 255.0,\n exponent: this.unpackFloat(entry[3]),\n },\n };\n\n const material = this._createMaterial(args);\n return createSurfaceMaterial(material);\n }\n\n /** Construct the finished color table. */\n public buildAtlasTable(): MaterialAtlasTable {\n assert(this.materials.length > 0);\n const m = new Uint32Array(this.materials);\n return this.materials.length > 4 ? m : this.materialFromAtlasEntry(m);\n }\n}\n\n/** A node in a split vertex table. Each node corresponds to one or more elements. */\nclass Node {\n public readonly vertices: VertexBuffer;\n public readonly remappedIndices = new Map<number, number>();\n public readonly indices = new IndexBuffer();\n public readonly colors?: ColorTableRemapper;\n public readonly atlas?: MaterialAtlasRemapper;\n public readonly usesUnquantizedPositions?: boolean;\n\n /** `vertexTable` is the source table containing vertex data for all nodes, from which this node will extract the vertices belong to it. */\n public constructor(vertexTable: VertexTable, atlas?: AtlasInfo) {\n this.vertices = new VertexBuffer(vertexTable);\n if (undefined === vertexTable.uniformColor)\n this.colors = new ColorTableRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + 4 * vertexTable.numVertices * vertexTable.numRgbaPerVertex));\n\n if (atlas) {\n const atlasOffset = (vertexTable.numVertices * vertexTable.numRgbaPerVertex + atlas.offset) * 4;\n this.atlas = new MaterialAtlasRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + atlasOffset), atlas.createMaterial);\n }\n\n this.usesUnquantizedPositions = vertexTable.usesUnquantizedPositions;\n }\n\n public addVertex(originalIndex: number, vertex: Uint32Array): void {\n let newIndex = this.remappedIndices.get(originalIndex);\n if (undefined === newIndex) {\n newIndex = this.vertices.length;\n this.remappedIndices.set(originalIndex, newIndex);\n\n this.colors?.remap(vertex, this.usesUnquantizedPositions);\n this.atlas?.remap(vertex, this.usesUnquantizedPositions);\n this.vertices.push(vertex);\n }\n\n this.indices.push(newIndex);\n }\n\n public buildOutput(maxDimension: number, surfaceMaterial?: SurfaceMaterial): VertexTableWithIndices {\n const materialAtlas = this.atlas?.buildAtlasTable();\n\n let material: SurfaceMaterial | undefined;\n if (materialAtlas instanceof Uint32Array) {\n const colorTableOffset = undefined !== this.colors?.colors.length && this.colors?.colors.length > 1 ? this.colors?.colors.length : 0;\n material = {\n isAtlas: true,\n hasTranslucency: (surfaceMaterial?.isAtlas && surfaceMaterial?.hasTranslucency) ?? false,\n overridesAlpha: (surfaceMaterial?.isAtlas && surfaceMaterial?.overridesAlpha) ?? false,\n vertexTableOffset: colorTableOffset,\n numMaterials: materialAtlas.length / 4,\n };\n } else {\n material = materialAtlas;\n }\n\n return {\n indices: this.indices.toVertexIndices(),\n vertices: this.vertices.buildVertexTable(maxDimension, this.colors?.buildColorTable(), materialAtlas),\n material,\n };\n }\n}\n\ninterface AtlasInfo {\n offset: number;\n createMaterial: CreateRenderMaterial;\n}\n\ninterface VertexTableSplitArgs extends VertexTableWithIndices {\n featureTable: RenderFeatureTable;\n atlasInfo?: AtlasInfo;\n}\n\n/** @internal */\nexport type ComputeAnimationNodeId = (featureIndex: number) => number;\n\nclass VertexTableSplitter {\n private readonly _input: VertexTableSplitArgs;\n private readonly _computeNodeId: ComputeAnimationNodeId;\n private readonly _nodes = new Map<number, Node>();\n\n private constructor(input: VertexTableSplitArgs, computeNodeId: ComputeAnimationNodeId) {\n this._input = input;\n this._computeNodeId = computeNodeId;\n }\n\n /** Split the source into one or more output nodes, returning a mapping of integer node Id to node. */\n public static split(source: VertexTableSplitArgs, computeNodeId: ComputeAnimationNodeId): Map<number, Node> {\n const splitter = new VertexTableSplitter(source, computeNodeId);\n splitter.split();\n return splitter._nodes;\n }\n\n private split(): void {\n // Track the most recent feature and corresponding node to avoid repeated lookups - vertices for\n // individual features are largely contiguous.\n const curState = {\n featureIndex: -1,\n node: undefined as unknown as Node,\n };\n\n const vertSize = this._input.vertices.numRgbaPerVertex;\n const vertex = new Uint32Array(vertSize);\n const vertexTable = new Uint32Array(this._input.vertices.data.buffer, this._input.vertices.data.byteOffset, this._input.vertices.numVertices * vertSize);\n\n let extractFeatureIndex: () => number;\n if (this._input.vertices.usesUnquantizedPositions) {\n const vertexBytes = new Uint8Array(vertex.buffer);\n extractFeatureIndex = () => {\n return vertexBytes[3]\n | (vertexBytes[7] << 8)\n | (vertexBytes[11] << 16);\n };\n } else {\n extractFeatureIndex = () => vertex[2] & 0x00ffffff;\n }\n\n for (const index of this._input.indices) {\n // Extract the data for this vertex without allocating new typed arrays.\n const vertexOffset = index * vertSize;\n for (let i = 0; i < vertex.length; i++)\n vertex[i] = vertexTable[vertexOffset + i];\n\n // Determine to which element the vertex belongs and find the corresponding Node.\n const featureIndex = extractFeatureIndex();\n if (curState.featureIndex !== featureIndex) {\n curState.featureIndex = featureIndex;\n const nodeId = this._computeNodeId(featureIndex);\n let node = this._nodes.get(nodeId);\n if (undefined === node)\n this._nodes.set(nodeId, node = new Node(this._input.vertices, this._input.atlasInfo));\n\n curState.node = node;\n }\n\n // Add the vertex to the appropriate node.\n curState.node.addVertex(index, vertex);\n }\n }\n}\n\n/** @internal */\nexport interface SplitVertexTableArgs {\n featureTable: RenderFeatureTable;\n maxDimension: number;\n computeNodeId: ComputeAnimationNodeId;\n}\n\n/** @internal */\nexport interface SplitPointStringArgs extends SplitVertexTableArgs {\n params: PointStringParams;\n}\n\n/** Given a PointStringParams and a function that can associate a node Id with an element Id, produce a mapping of nodes to PointStringParams, splitting up\n * the input params as needed.\n * @internal\n */\nexport function splitPointStringParams(args: SplitPointStringArgs): Map<number, PointStringParams> {\n const nodes = VertexTableSplitter.split({\n indices: args.params.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n }, args.computeNodeId);\n\n const result = new Map<number, PointStringParams>();\n for (const [id, node] of nodes) {\n const { vertices, indices } = node.buildOutput(args.maxDimension);\n result.set(id, { vertices, indices, weight: args.params.weight });\n }\n\n return result;\n}\n\ninterface RemappedSegmentEdges {\n indices: IndexBuffer;\n endPointAndQuadIndices: Uint32ArrayBuilder;\n}\n\ninterface RemappedSilhouetteEdges extends RemappedSegmentEdges {\n normalPairs: Uint32ArrayBuilder;\n}\n\nclass RemappedPolylineEdges {\n public readonly indices = new IndexBuffer();\n public readonly prevIndices = new IndexBuffer();\n public readonly nextIndicesAndParams = new Uint32ArrayBuilder();\n}\n\ninterface RemappedIndexEdges {\n edges: Uint8ArrayBuilder;\n silhouettes: Uint8ArrayBuilder;\n}\n\ninterface RemappedEdges {\n segments?: RemappedSegmentEdges;\n silhouettes?: RemappedSilhouetteEdges;\n polylines?: RemappedPolylineEdges;\n indexed?: RemappedIndexEdges;\n}\n\ninterface RemappedIndex {\n node: Node;\n id: number;\n index: number;\n}\n\nfunction remapIndex(out: RemappedIndex, srcIndex: number, nodes: Map<number, Node>): boolean {\n for (const [id, node] of nodes) {\n const index = node.remappedIndices.get(srcIndex);\n if (undefined !== index) {\n out.index = index;\n out.node = node;\n out.id = id;\n return true;\n }\n }\n\n assert(false);\n return false;\n}\n\nfunction remapSegmentEdges(type: \"segments\" | \"silhouettes\", source: EdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const src = source[type];\n if (!src)\n return;\n\n const srcEndPts = new Uint32Array(src.endPointAndQuadIndices.buffer, src.endPointAndQuadIndices.byteOffset, src.endPointAndQuadIndices.length / 4);\n let srcNormalPairs;\n if (type === \"silhouettes\") {\n assert(undefined !== source.silhouettes);\n srcNormalPairs = new Uint32Array(source.silhouettes.normalPairs.buffer, source.silhouettes.normalPairs.byteOffset, source.silhouettes.normalPairs.length / 4);\n }\n\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const srcIndex of src.indices) {\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\n let endPointAndQuad = srcEndPts[curIndexIndex];\n const otherIndex = (endPointAndQuad & 0x00ffffff) >>> 0;\n const newOtherIndex = remappedIndex.node.remappedIndices.get(otherIndex);\n assert(undefined !== newOtherIndex);\n endPointAndQuad = (endPointAndQuad & 0xff000000) | newOtherIndex;\n\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (srcNormalPairs) {\n if (!entry.silhouettes)\n entry.silhouettes = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder(), normalPairs: new Uint32ArrayBuilder() };\n\n entry.silhouettes.normalPairs.push(srcNormalPairs[curIndexIndex]);\n } else if (!entry.segments) {\n entry.segments = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder() };\n }\n\n const segments = entry[type];\n assert(undefined !== segments);\n\n segments.indices.push(remappedIndex.index);\n segments.endPointAndQuadIndices.push(endPointAndQuad);\n }\n\n ++curIndexIndex;\n }\n}\n\nfunction remapPolylineEdges(src: TesselatedPolyline, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\n const prevIter = src.prevIndices[Symbol.iterator]();\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const srcIndex of src.indices) {\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\n const prevIndex = prevIter.next().value;\n assert(undefined !== prevIndex);\n const newPrevIndex = remappedIndex.node.remappedIndices.get(prevIndex);\n assert(undefined !== newPrevIndex);\n\n let nextAndParam = srcNextAndParam[curIndexIndex];\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\n assert(undefined !== newNextIndex);\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\n\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (!entry.polylines)\n entry.polylines = new RemappedPolylineEdges();\n\n entry.polylines.indices.push(remappedIndex.index);\n entry.polylines.prevIndices.push(newPrevIndex);\n entry.polylines.nextIndicesAndParams.push(nextAndParam);\n }\n\n ++curIndexIndex;\n }\n}\n\nfunction remapIndexedEdges(src: IndexedEdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const srcEdgeData = src.edges.data;\n const numSegments = src.edges.numSegments;\n const silhouetteStartByteIndex = numSegments * 6 + src.edges.silhouettePadding;\n\n function getUint24EdgePair(byteIndex: number): [number, number] {\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16];\n }\n\n function setUint24EdgePair(indEdges: RemappedIndexEdges, value1: number, value2: number): void {\n indEdges.edges.push(value1 & 0x0000ff);\n indEdges.edges.push((value1 & 0x00ff00) >>> 8);\n indEdges.edges.push((value1 & 0xff0000) >>> 16);\n indEdges.edges.push(value2 & 0x0000ff);\n indEdges.edges.push((value2 & 0x00ff00) >>> 8);\n indEdges.edges.push((value2 & 0xff0000) >>> 16);\n }\n\n function getUint24SilPair(byteIndex: number): [number, number, number, number] {\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16,\n srcEdgeData[byteIndex + 6] | (srcEdgeData[byteIndex + 7] << 8), srcEdgeData[byteIndex + 8] | (srcEdgeData[byteIndex + 9] << 8)];\n }\n\n function setUint24SilPair(indSil: RemappedIndexEdges, value1: number, value2: number, norm1: number, norm2: number): void {\n indSil.silhouettes.push(value1 & 0x0000ff);\n indSil.silhouettes.push((value1 & 0x00ff00) >>> 8);\n indSil.silhouettes.push((value1 & 0xff0000) >>> 16);\n indSil.silhouettes.push(value2 & 0x0000ff);\n indSil.silhouettes.push((value2 & 0x00ff00) >>> 8);\n indSil.silhouettes.push((value2 & 0xff0000) >>> 16);\n indSil.silhouettes.push(norm1 & 0x0000ff);\n indSil.silhouettes.push((norm1 & 0x00ff00) >>> 8);\n indSil.silhouettes.push(norm2 & 0x0000ff);\n indSil.silhouettes.push((norm2 & 0x00ff00) >>> 8);\n }\n\n let maxIndex = 0;\n for (const srcIndex of src.indices)\n maxIndex = Math.max (srcIndex, maxIndex);\n\n const remappedIndex = { } as unknown as RemappedIndex;\n let es1Index = 0, es2Index = 0, n1 = 0, n2 = 0;\n for (let curSegment = 0, byteIndex = 0; curSegment <= maxIndex; ++curSegment) {\n if (curSegment < numSegments) { // edges\n [es1Index, es2Index] = getUint24EdgePair(byteIndex);\n byteIndex += 6;\n } else { // silhouettes\n byteIndex = silhouetteStartByteIndex + (curSegment - numSegments) * 10;\n [es1Index, es2Index, n1, n2] = getUint24SilPair(byteIndex);\n }\n\n if (remapIndex(remappedIndex, es1Index, nodes)) {\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (!entry.indexed)\n entry.indexed = { edges: new Uint8ArrayBuilder(), silhouettes: new Uint8ArrayBuilder() };\n\n if (curSegment < numSegments) { // edges\n const newE1Index = remappedIndex.node.remappedIndices.get(es1Index);\n assert(undefined !== newE1Index);\n const newE2Index = remappedIndex.node.remappedIndices.get(es2Index);\n assert(undefined !== newE2Index);\n setUint24EdgePair(entry.indexed, newE1Index, newE2Index);\n } else { // silhouettes\n const newS1Index = remappedIndex.node.remappedIndices.get(es1Index);\n assert(undefined !== newS1Index);\n const newS2Index = remappedIndex.node.remappedIndices.get(es2Index);\n assert(undefined !== newS2Index);\n setUint24SilPair(entry.indexed, newS1Index, newS2Index, n1, n2);\n }\n }\n }\n}\n\nfunction splitEdges(source: EdgeParams, nodes: Map<number, Node>, maxDimension: number): Map<number, EdgeParams> {\n const edges = new Map<number, RemappedEdges>();\n remapSegmentEdges(\"segments\", source, nodes, edges);\n remapSegmentEdges(\"silhouettes\", source, nodes, edges);\n\n if (source.polylines)\n remapPolylineEdges(source.polylines, nodes, edges);\n\n if (source.indexed)\n remapIndexedEdges(source.indexed, nodes, edges);\n\n const result = new Map<number, EdgeParams>();\n for (const [id, remappedEdges] of edges) {\n if (!remappedEdges.segments && !remappedEdges.silhouettes && !remappedEdges.indexed)\n continue;\n\n let edgeTable = { } as unknown as EdgeTable;\n let edgeIndices = { } as unknown as VertexIndices;\n if (remappedEdges.indexed) {\n const numSegmentEdges = remappedEdges.indexed.edges.length / 6;\n const numSilhouettes = remappedEdges.indexed.silhouettes.length / 10;\n const { width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams(numSegmentEdges, numSilhouettes, maxDimension);\n const data = new Uint8Array(width * height * 4);\n data.set(remappedEdges.indexed.edges.toTypedArray(), 0);\n if (numSilhouettes > 0)\n data.set(remappedEdges.indexed.silhouettes.toTypedArray(), silhouetteStartByteIndex + silhouettePadding);\n\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n edgeIndices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n edgeIndices.setNthIndex(i * 6 + j, i);\n\n edgeTable = {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n };\n }\n\n result.set(id, {\n weight: source.weight,\n linePixels: source.linePixels,\n segments: remappedEdges.segments ? {\n indices: remappedEdges.segments.indices.toVertexIndices(),\n endPointAndQuadIndices: remappedEdges.segments.endPointAndQuadIndices.toUint8Array(),\n } : undefined,\n silhouettes: remappedEdges.silhouettes ? {\n indices: remappedEdges.silhouettes.indices.toVertexIndices(),\n endPointAndQuadIndices: remappedEdges.silhouettes.endPointAndQuadIndices.toUint8Array(),\n normalPairs: remappedEdges.silhouettes.normalPairs.toUint8Array(),\n } : undefined,\n polylines: remappedEdges.polylines ? {\n indices: remappedEdges.polylines.indices.toVertexIndices(),\n prevIndices: remappedEdges.polylines.prevIndices.toVertexIndices(),\n nextIndicesAndParams: remappedEdges.polylines.nextIndicesAndParams.toUint8Array(),\n } : undefined,\n indexed: remappedEdges.indexed ? {\n indices: edgeIndices,\n edges: edgeTable,\n } : undefined,\n });\n }\n\n return result;\n}\n\n/** @internal */\nexport interface SplitMeshArgs extends SplitVertexTableArgs {\n params: MeshParams;\n createMaterial: CreateRenderMaterial;\n}\n\n/** @internal */\nexport function splitMeshParams(args: SplitMeshArgs): Map<number, MeshParams> {\n const result = new Map<number, MeshParams>();\n\n const mat = args.params.surface.material;\n const atlasOffset = undefined !== mat && mat.isAtlas ? mat.vertexTableOffset : undefined;\n const atlasInfo = undefined !== atlasOffset ? { offset: atlasOffset, createMaterial: args.createMaterial } : undefined;\n\n const nodes = VertexTableSplitter.split({\n indices: args.params.surface.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n atlasInfo,\n }, args.computeNodeId);\n\n const edges = args.params.edges ? splitEdges(args.params.edges, nodes, args.maxDimension) : undefined;\n\n for (const [id, node] of nodes) {\n const { vertices, indices, material } = node.buildOutput(args.maxDimension, args.params.surface.material);\n const params: MeshParams = {\n vertices,\n surface: {\n type: args.params.surface.type,\n indices,\n fillFlags: args.params.surface.fillFlags,\n hasBakedLighting: args.params.surface.hasBakedLighting,\n textureMapping: args.params.surface.textureMapping,\n material: material !== undefined ? material : args.params.surface.material,\n },\n edges: edges?.get(id),\n isPlanar: args.params.isPlanar,\n // ###TODO handle aux channels.......\n auxChannels: args.params.auxChannels,\n };\n\n result.set(id, params);\n }\n\n return result;\n}\n\n/** @internal */\nexport interface SplitPolylineArgs extends SplitVertexTableArgs {\n params: PolylineParams;\n}\n\ninterface PolylineNode extends Node {\n prevIndices?: IndexBuffer;\n nextIndicesAndParams?: Uint32ArrayBuilder;\n}\n\n/** @internal */\nexport function splitPolylineParams(args: SplitPolylineArgs): Map<number, PolylineParams> {\n const nodes = VertexTableSplitter.split({\n indices: args.params.polyline.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n }, args.computeNodeId) as Map<number, PolylineNode>;\n\n const src = args.params.polyline;\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const prevIndex of src.prevIndices) {\n if (remapIndex(remappedIndex, prevIndex, nodes)) {\n const node = remappedIndex.node as PolylineNode;\n if (!node.prevIndices) {\n assert(undefined === node.nextIndicesAndParams);\n node.prevIndices = new IndexBuffer(node.indices.numIndices);\n node.nextIndicesAndParams = new Uint32ArrayBuilder({ initialCapacity: node.indices.numIndices });\n } else {\n assert(undefined !== node.nextIndicesAndParams);\n }\n\n node.prevIndices.push(remappedIndex.index);\n\n let nextAndParam = srcNextAndParam[curIndexIndex];\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\n assert(undefined !== newNextIndex);\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\n node.nextIndicesAndParams.push(nextAndParam);\n }\n\n ++curIndexIndex;\n }\n\n const result = new Map<number, PolylineParams>();\n for (const [id, node] of nodes) {\n assert(undefined !== node.prevIndices && undefined !== node.nextIndicesAndParams);\n const { vertices, indices } = node.buildOutput(args.maxDimension);\n const params: PolylineParams = {\n ...args.params,\n vertices,\n polyline: {\n indices,\n prevIndices: node.prevIndices.toVertexIndices(),\n nextIndicesAndParams: node.nextIndicesAndParams.toUint8Array(),\n },\n };\n\n result.set(id, params);\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"VertexTableSplitter.js","sourceRoot":"","sources":["../../../../../src/common/internal/render/VertexTableSplitter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Rendering\n */\n\nimport { assert, Uint32ArrayBuilder, Uint8ArrayBuilder } from \"@itwin/core-bentley\";\nimport { ColorDef, RenderFeatureTable, RenderMaterial } from \"@itwin/core-common\";\nimport { calculateEdgeTableParams, EdgeParams, EdgeTable, IndexedEdgeParams } from \"./EdgeParams\";\nimport { computeDimensions, VertexTable } from \"./VertexTable\";\nimport { VertexIndices } from \"./VertexIndices\";\nimport { createSurfaceMaterial, SurfaceMaterial } from \"./SurfaceParams\";\nimport { MaterialParams } from \"../../render/MaterialParams\";\nimport { MeshParams } from \"./MeshParams\";\nimport { PointStringParams } from \"./PointStringParams\";\nimport { PolylineParams, TesselatedPolyline } from \"./PolylineParams\";\n\n/** @internal */\nexport interface VertexTableWithIndices {\n vertices: VertexTable;\n indices: VertexIndices;\n material?: SurfaceMaterial;\n}\n\n/** Builds up a [[VertexIndices]].\n * Exported strictly for tests.\n * @internal\n */\nexport class IndexBuffer {\n private readonly _builder: Uint8ArrayBuilder;\n private readonly _index32 = new Uint32Array(1);\n private readonly _index8 = new Uint8Array(this._index32.buffer, 0, 3);\n\n public constructor(initialCapacity = 3) {\n this._builder = new Uint8ArrayBuilder({ initialCapacity: initialCapacity * 3 });\n }\n\n public get numIndices(): number {\n assert((this._builder.length % 3) === 0);\n return this._builder.length / 3;\n }\n\n public push(index: number): void {\n this._index32[0] = index;\n this._builder.append(this._index8);\n }\n\n public toVertexIndices(): VertexIndices {\n return new VertexIndices(this._builder.toTypedArray());\n }\n}\n\n/** Builds up a [[VertexTable]]. */\nclass VertexBuffer {\n private readonly _builder: Uint32ArrayBuilder;\n private readonly _source: VertexTable;\n\n /** `source` is the original table containing the vertex data from which individual vertices will be obtained. */\n public constructor(source: VertexTable) {\n this._source = source;\n this._builder = new Uint32ArrayBuilder({ initialCapacity: 3 * source.numRgbaPerVertex });\n }\n\n /** The number of vertices currently in the table. */\n public get length(): number {\n assert((this._builder.length % this.vertexSize) === 0);\n return this._builder.length / this.vertexSize;\n }\n\n /** The number of 32-bit unsigned integers (RGBA values) per vertex. */\n public get vertexSize(): number {\n return this._source.numRgbaPerVertex;\n }\n\n /** Append a vertex. `vertex` must be of size [[vertexSize]]. */\n public push(vertex: Uint32Array): void {\n assert(vertex.length === this.vertexSize);\n this._builder.append(vertex);\n }\n\n /** Construct the finished vertex table. */\n public buildVertexTable(maxDimension: number, colorTable: ColorTable | undefined, materialAtlasTable: MaterialAtlasTable): VertexTable {\n const source = this._source;\n colorTable = colorTable ?? source.uniformColor;\n assert(undefined !== colorTable);\n\n const colorTableLength = colorTable instanceof Uint32Array ? colorTable.length : 0;\n const materialAtlasTableLength = materialAtlasTable instanceof Uint32Array ? materialAtlasTable.length : 0;\n const dimensions = computeDimensions(this.length, this.vertexSize, colorTableLength + materialAtlasTableLength, maxDimension);\n\n let rgbaData = this._builder.toTypedArray();\n if (dimensions.width * dimensions.height > rgbaData.length) {\n const prevData = rgbaData;\n rgbaData = new Uint32Array(dimensions.width * dimensions.height);\n rgbaData.set(prevData, 0);\n }\n\n let tableSize = this.vertexSize * this.length;\n if (colorTable instanceof Uint32Array) {\n rgbaData.set(colorTable, tableSize);\n tableSize += colorTable.length;\n }\n\n if (materialAtlasTable instanceof Uint32Array)\n rgbaData.set(materialAtlasTable, tableSize);\n\n return {\n data: new Uint8Array(rgbaData.buffer, rgbaData.byteOffset, rgbaData.byteLength),\n usesUnquantizedPositions: source.usesUnquantizedPositions,\n qparams: source.qparams,\n width: dimensions.width,\n height: dimensions.height,\n hasTranslucency: source.hasTranslucency,\n uniformColor: colorTable instanceof ColorDef ? colorTable : undefined,\n featureIndexType: source.featureIndexType,\n uniformFeatureID: source.uniformFeatureID,\n numVertices: this.length,\n numRgbaPerVertex: source.numRgbaPerVertex,\n uvParams: source.uvParams,\n };\n }\n}\n\ntype ColorTable = Uint32Array | ColorDef;\n\n/** Remaps portions of a source color table into a filtered target color table. */\nclass ColorTableRemapper {\n private readonly _remappedIndices = new Map<number, number>();\n private readonly _colorTable: Uint32Array;\n public readonly colors: number[] = [];\n private readonly _32 = new Uint32Array(1);\n private readonly _16 = new Uint16Array(this._32.buffer);\n\n public constructor(colorTable: Uint32Array) {\n this._colorTable = colorTable;\n }\n\n /** Extract the color index stored in `vertex`, ensure it is present in the remapped color table, and return its index in that table. */\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\n const vertIndex = usesUnquantizedPositions ? 4 : 1;\n const shortIndex = usesUnquantizedPositions ? 0 : 1;\n this._32[0] = vertex[vertIndex];\n const oldIndex = this._16[shortIndex];\n let newIndex = this._remappedIndices.get(oldIndex);\n if (undefined === newIndex) {\n newIndex = this.colors.length;\n this._remappedIndices.set(oldIndex, newIndex);\n const color = this._colorTable[oldIndex];\n this.colors.push(color);\n }\n\n this._16[shortIndex] = newIndex;\n vertex[vertIndex] = this._32[0];\n }\n\n /** Construct the finished color table. */\n public buildColorTable(): ColorTable {\n assert(this.colors.length > 0);\n return this.colors.length > 1 ? new Uint32Array(this.colors) : ColorDef.fromAbgr(this.colors[0]);\n }\n}\n\ntype MaterialAtlasTable = Uint32Array | SurfaceMaterial | undefined;\n\ntype CreateRenderMaterial = (args: MaterialParams) => RenderMaterial | undefined;\n\nclass MaterialAtlasRemapper {\n private readonly _remappedIndices = new Map<number, number>();\n private readonly _atlasTable: Uint32Array;\n private readonly _createMaterial: CreateRenderMaterial;\n public readonly materials: number[] = [];\n private readonly _32 = new Uint32Array(1);\n private readonly _8 = new Uint8Array(this._32.buffer);\n\n public constructor(_atlasTable: Uint32Array, createMaterial: CreateRenderMaterial) {\n this._atlasTable = _atlasTable;\n this._createMaterial = createMaterial;\n }\n\n /** Extract the mat index stored in `vertex`, ensure it is present in the remapped atlas table, and return its index in that table. */\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\n const vertIndex = usesUnquantizedPositions ? 3 : 2;\n this._32[0] = vertex[vertIndex];\n const oldIndex = this._8[3];\n let newIndex = this._remappedIndices.get(oldIndex);\n if (undefined === newIndex) {\n newIndex = this.materials.length / 4;\n this._remappedIndices.set(oldIndex, newIndex);\n let index = oldIndex * 4;\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index]);\n }\n\n this._8[3] = newIndex;\n vertex[vertIndex] = this._32[0];\n }\n\n private unpackFloat(value: number): number {\n this._32[0] = value;\n const valUint32 = this._32[0];\n const bias = 38.0;\n const temp = (valUint32 >>> 24) / 2.0;\n let exponent = Math.floor(temp);\n let sign = (temp - exponent) * 2.0;\n sign = -(sign * 2.0 - 1.0);\n const base = sign * (valUint32 & 0xffffff) / 16777216.0;\n exponent = exponent - bias;\n return base * Math.pow(10.0, exponent);\n }\n\n private materialFromAtlasEntry(entry: Uint32Array): SurfaceMaterial | undefined {\n const rgbOverridden = (entry[1] & 0x1000000) !== 0;\n const alphaOverridden = (entry[1] & 0x2000000) !== 0;\n const args: MaterialParams = {\n alpha: alphaOverridden ? (entry[0] >>> 24) / 255.0 : undefined,\n diffuse: {\n color: rgbOverridden ? ColorDef.fromTbgr(entry[0] & 0xffffff) : undefined,\n weight: ((entry[1] >>> 8) & 0xff) / 255.0,\n },\n specular: {\n color: ColorDef.fromTbgr(entry[2]),\n weight: ((entry[1] >>> 16) & 0xff) / 255.0,\n exponent: this.unpackFloat(entry[3]),\n },\n };\n\n const material = this._createMaterial(args);\n return createSurfaceMaterial(material);\n }\n\n /** Construct the finished color table. */\n public buildAtlasTable(): MaterialAtlasTable {\n assert(this.materials.length > 0);\n const m = new Uint32Array(this.materials);\n return this.materials.length > 4 ? m : this.materialFromAtlasEntry(m);\n }\n}\n\n/** A node in a split vertex table. Each node corresponds to one or more elements. */\nclass Node {\n public readonly vertices: VertexBuffer;\n public readonly remappedIndices = new Map<number, number>();\n public readonly indices = new IndexBuffer();\n public readonly colors?: ColorTableRemapper;\n public readonly atlas?: MaterialAtlasRemapper;\n public readonly usesUnquantizedPositions?: boolean;\n\n /** `vertexTable` is the source table containing vertex data for all nodes, from which this node will extract the vertices belong to it. */\n public constructor(vertexTable: VertexTable, atlas?: AtlasInfo) {\n this.vertices = new VertexBuffer(vertexTable);\n if (undefined === vertexTable.uniformColor)\n this.colors = new ColorTableRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + 4 * vertexTable.numVertices * vertexTable.numRgbaPerVertex));\n\n if (atlas) {\n const atlasOffset = (vertexTable.numVertices * vertexTable.numRgbaPerVertex + atlas.offset) * 4;\n this.atlas = new MaterialAtlasRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + atlasOffset), atlas.createMaterial);\n }\n\n this.usesUnquantizedPositions = vertexTable.usesUnquantizedPositions;\n }\n\n public addVertex(originalIndex: number, vertex: Uint32Array): void {\n let newIndex = this.remappedIndices.get(originalIndex);\n if (undefined === newIndex) {\n newIndex = this.vertices.length;\n this.remappedIndices.set(originalIndex, newIndex);\n\n this.colors?.remap(vertex, this.usesUnquantizedPositions);\n this.atlas?.remap(vertex, this.usesUnquantizedPositions);\n this.vertices.push(vertex);\n }\n\n this.indices.push(newIndex);\n }\n\n public buildOutput(maxDimension: number, surfaceMaterial?: SurfaceMaterial): VertexTableWithIndices {\n const materialAtlas = this.atlas?.buildAtlasTable();\n\n let material: SurfaceMaterial | undefined;\n if (materialAtlas instanceof Uint32Array) {\n const colorTableOffset = undefined !== this.colors?.colors.length && this.colors?.colors.length > 1 ? this.colors?.colors.length : 0;\n material = {\n isAtlas: true,\n hasTranslucency: (surfaceMaterial?.isAtlas && surfaceMaterial?.hasTranslucency) ?? false,\n overridesAlpha: (surfaceMaterial?.isAtlas && surfaceMaterial?.overridesAlpha) ?? false,\n vertexTableOffset: colorTableOffset,\n numMaterials: materialAtlas.length / 4,\n };\n } else {\n material = materialAtlas;\n }\n\n return {\n indices: this.indices.toVertexIndices(),\n vertices: this.vertices.buildVertexTable(maxDimension, this.colors?.buildColorTable(), materialAtlas),\n material,\n };\n }\n}\n\ninterface AtlasInfo {\n offset: number;\n createMaterial: CreateRenderMaterial;\n}\n\ninterface VertexTableSplitArgs extends VertexTableWithIndices {\n featureTable: RenderFeatureTable;\n atlasInfo?: AtlasInfo;\n}\n\n/** @internal */\nexport type ComputeAnimationNodeId = (featureIndex: number) => number;\n\nclass VertexTableSplitter {\n private readonly _input: VertexTableSplitArgs;\n private readonly _computeNodeId: ComputeAnimationNodeId;\n private readonly _nodes = new Map<number, Node>();\n\n private constructor(input: VertexTableSplitArgs, computeNodeId: ComputeAnimationNodeId) {\n this._input = input;\n this._computeNodeId = computeNodeId;\n }\n\n /** Split the source into one or more output nodes, returning a mapping of integer node Id to node. */\n public static split(source: VertexTableSplitArgs, computeNodeId: ComputeAnimationNodeId): Map<number, Node> {\n const splitter = new VertexTableSplitter(source, computeNodeId);\n splitter.split();\n return splitter._nodes;\n }\n\n private split(): void {\n // Track the most recent feature and corresponding node to avoid repeated lookups - vertices for\n // individual features are largely contiguous.\n const curState = {\n featureIndex: -1,\n node: undefined as unknown as Node,\n };\n\n const vertSize = this._input.vertices.numRgbaPerVertex;\n const vertex = new Uint32Array(vertSize);\n const vertexTable = new Uint32Array(this._input.vertices.data.buffer, this._input.vertices.data.byteOffset, this._input.vertices.numVertices * vertSize);\n\n let extractFeatureIndex: () => number;\n if (this._input.vertices.usesUnquantizedPositions) {\n const vertexBytes = new Uint8Array(vertex.buffer);\n extractFeatureIndex = () => {\n return vertexBytes[3]\n | (vertexBytes[7] << 8)\n | (vertexBytes[11] << 16);\n };\n } else {\n extractFeatureIndex = () => vertex[2] & 0x00ffffff;\n }\n\n for (const index of this._input.indices) {\n // Extract the data for this vertex without allocating new typed arrays.\n const vertexOffset = index * vertSize;\n for (let i = 0; i < vertex.length; i++)\n vertex[i] = vertexTable[vertexOffset + i];\n\n // Determine to which element the vertex belongs and find the corresponding Node.\n const featureIndex = extractFeatureIndex();\n if (curState.featureIndex !== featureIndex) {\n curState.featureIndex = featureIndex;\n const nodeId = this._computeNodeId(featureIndex);\n let node = this._nodes.get(nodeId);\n if (undefined === node)\n this._nodes.set(nodeId, node = new Node(this._input.vertices, this._input.atlasInfo));\n\n curState.node = node;\n }\n\n // Add the vertex to the appropriate node.\n curState.node.addVertex(index, vertex);\n }\n }\n}\n\n/** @internal */\nexport interface SplitVertexTableArgs {\n featureTable: RenderFeatureTable;\n maxDimension: number;\n computeNodeId: ComputeAnimationNodeId;\n}\n\n/** @internal */\nexport interface SplitPointStringArgs extends SplitVertexTableArgs {\n params: PointStringParams;\n}\n\n/** Given a PointStringParams and a function that can associate a node Id with an element Id, produce a mapping of nodes to PointStringParams, splitting up\n * the input params as needed.\n * @internal\n */\nexport function splitPointStringParams(args: SplitPointStringArgs): Map<number, PointStringParams> {\n const nodes = VertexTableSplitter.split({\n indices: args.params.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n }, args.computeNodeId);\n\n const result = new Map<number, PointStringParams>();\n for (const [id, node] of nodes) {\n const { vertices, indices } = node.buildOutput(args.maxDimension);\n result.set(id, { vertices, indices, weight: args.params.weight });\n }\n\n return result;\n}\n\ninterface RemappedSegmentEdges {\n indices: IndexBuffer;\n endPointAndQuadIndices: Uint32ArrayBuilder;\n}\n\ninterface RemappedSilhouetteEdges extends RemappedSegmentEdges {\n normalPairs: Uint32ArrayBuilder;\n}\n\nclass RemappedPolylineEdges {\n public readonly indices = new IndexBuffer();\n public readonly prevIndices = new IndexBuffer();\n public readonly nextIndicesAndParams = new Uint32ArrayBuilder();\n}\n\ninterface RemappedIndexEdges {\n edges: Uint8ArrayBuilder;\n silhouettes: Uint8ArrayBuilder;\n}\n\ninterface RemappedEdges {\n segments?: RemappedSegmentEdges;\n silhouettes?: RemappedSilhouetteEdges;\n polylines?: RemappedPolylineEdges;\n indexed?: RemappedIndexEdges;\n}\n\ninterface RemappedIndex {\n node: Node;\n id: number;\n index: number;\n}\n\nfunction remapIndex(out: RemappedIndex, srcIndex: number, nodes: Map<number, Node>): boolean {\n for (const [id, node] of nodes) {\n const index = node.remappedIndices.get(srcIndex);\n if (undefined !== index) {\n out.index = index;\n out.node = node;\n out.id = id;\n return true;\n }\n }\n\n assert(false);\n return false;\n}\n\nfunction remapSegmentEdges(type: \"segments\" | \"silhouettes\", source: EdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const src = source[type];\n if (!src)\n return;\n\n const srcEndPts = new Uint32Array(src.endPointAndQuadIndices.buffer, src.endPointAndQuadIndices.byteOffset, src.endPointAndQuadIndices.length / 4);\n let srcNormalPairs;\n if (type === \"silhouettes\") {\n assert(undefined !== source.silhouettes);\n srcNormalPairs = new Uint32Array(source.silhouettes.normalPairs.buffer, source.silhouettes.normalPairs.byteOffset, source.silhouettes.normalPairs.length / 4);\n }\n\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const srcIndex of src.indices) {\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\n let endPointAndQuad = srcEndPts[curIndexIndex];\n const otherIndex = (endPointAndQuad & 0x00ffffff) >>> 0;\n const newOtherIndex = remappedIndex.node.remappedIndices.get(otherIndex);\n assert(undefined !== newOtherIndex);\n endPointAndQuad = (endPointAndQuad & 0xff000000) | newOtherIndex;\n\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (srcNormalPairs) {\n if (!entry.silhouettes)\n entry.silhouettes = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder(), normalPairs: new Uint32ArrayBuilder() };\n\n entry.silhouettes.normalPairs.push(srcNormalPairs[curIndexIndex]);\n } else if (!entry.segments) {\n entry.segments = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder() };\n }\n\n const segments = entry[type];\n assert(undefined !== segments);\n\n segments.indices.push(remappedIndex.index);\n segments.endPointAndQuadIndices.push(endPointAndQuad);\n }\n\n ++curIndexIndex;\n }\n}\n\nfunction remapPolylineEdges(src: TesselatedPolyline, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\n const prevIter = src.prevIndices[Symbol.iterator]();\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const srcIndex of src.indices) {\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\n const prevIndex = prevIter.next().value;\n assert(undefined !== prevIndex);\n const newPrevIndex = remappedIndex.node.remappedIndices.get(prevIndex);\n assert(undefined !== newPrevIndex);\n\n let nextAndParam = srcNextAndParam[curIndexIndex];\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\n assert(undefined !== newNextIndex);\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\n\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (!entry.polylines)\n entry.polylines = new RemappedPolylineEdges();\n\n entry.polylines.indices.push(remappedIndex.index);\n entry.polylines.prevIndices.push(newPrevIndex);\n entry.polylines.nextIndicesAndParams.push(nextAndParam);\n }\n\n ++curIndexIndex;\n }\n}\n\nfunction remapIndexedEdges(src: IndexedEdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const srcEdgeData = src.edges.data;\n const numSegments = src.edges.numSegments;\n const silhouetteStartByteIndex = numSegments * 6 + src.edges.silhouettePadding;\n\n function getUint24EdgePair(byteIndex: number): [number, number] {\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16];\n }\n\n function setUint24EdgePair(indEdges: RemappedIndexEdges, value1: number, value2: number): void {\n indEdges.edges.push(value1 & 0x0000ff);\n indEdges.edges.push((value1 & 0x00ff00) >>> 8);\n indEdges.edges.push((value1 & 0xff0000) >>> 16);\n indEdges.edges.push(value2 & 0x0000ff);\n indEdges.edges.push((value2 & 0x00ff00) >>> 8);\n indEdges.edges.push((value2 & 0xff0000) >>> 16);\n }\n\n function getUint24SilPair(byteIndex: number): [number, number, number, number] {\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16,\n srcEdgeData[byteIndex + 6] | (srcEdgeData[byteIndex + 7] << 8), srcEdgeData[byteIndex + 8] | (srcEdgeData[byteIndex + 9] << 8)];\n }\n\n function setUint24SilPair(indSil: RemappedIndexEdges, value1: number, value2: number, norm1: number, norm2: number): void {\n indSil.silhouettes.push(value1 & 0x0000ff);\n indSil.silhouettes.push((value1 & 0x00ff00) >>> 8);\n indSil.silhouettes.push((value1 & 0xff0000) >>> 16);\n indSil.silhouettes.push(value2 & 0x0000ff);\n indSil.silhouettes.push((value2 & 0x00ff00) >>> 8);\n indSil.silhouettes.push((value2 & 0xff0000) >>> 16);\n indSil.silhouettes.push(norm1 & 0x0000ff);\n indSil.silhouettes.push((norm1 & 0x00ff00) >>> 8);\n indSil.silhouettes.push(norm2 & 0x0000ff);\n indSil.silhouettes.push((norm2 & 0x00ff00) >>> 8);\n }\n\n let maxIndex = 0;\n for (const srcIndex of src.indices)\n maxIndex = Math.max (srcIndex, maxIndex);\n\n const remappedIndex = { } as unknown as RemappedIndex;\n let es1Index = 0, es2Index = 0, n1 = 0, n2 = 0;\n for (let curSegment = 0, byteIndex = 0; curSegment <= maxIndex; ++curSegment) {\n if (curSegment < numSegments) { // edges\n [es1Index, es2Index] = getUint24EdgePair(byteIndex);\n byteIndex += 6;\n } else { // silhouettes\n byteIndex = silhouetteStartByteIndex + (curSegment - numSegments) * 10;\n [es1Index, es2Index, n1, n2] = getUint24SilPair(byteIndex);\n }\n\n if (remapIndex(remappedIndex, es1Index, nodes)) {\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (!entry.indexed)\n entry.indexed = { edges: new Uint8ArrayBuilder(), silhouettes: new Uint8ArrayBuilder() };\n\n if (curSegment < numSegments) { // edges\n const newE1Index = remappedIndex.node.remappedIndices.get(es1Index);\n assert(undefined !== newE1Index);\n const newE2Index = remappedIndex.node.remappedIndices.get(es2Index);\n assert(undefined !== newE2Index);\n setUint24EdgePair(entry.indexed, newE1Index, newE2Index);\n } else { // silhouettes\n const newS1Index = remappedIndex.node.remappedIndices.get(es1Index);\n assert(undefined !== newS1Index);\n const newS2Index = remappedIndex.node.remappedIndices.get(es2Index);\n assert(undefined !== newS2Index);\n setUint24SilPair(entry.indexed, newS1Index, newS2Index, n1, n2);\n }\n }\n }\n}\n\nfunction splitEdges(source: EdgeParams, nodes: Map<number, Node>, maxDimension: number): Map<number, EdgeParams> {\n const edges = new Map<number, RemappedEdges>();\n remapSegmentEdges(\"segments\", source, nodes, edges);\n remapSegmentEdges(\"silhouettes\", source, nodes, edges);\n\n if (source.polylineGroups?.length === 1)\n remapPolylineEdges(source.polylineGroups[0].polyline, nodes, edges);\n\n if (source.indexed)\n remapIndexedEdges(source.indexed, nodes, edges);\n\n const result = new Map<number, EdgeParams>();\n for (const [id, remappedEdges] of edges) {\n if (!remappedEdges.segments && !remappedEdges.silhouettes && !remappedEdges.indexed)\n continue;\n\n let edgeTable = { } as unknown as EdgeTable;\n let edgeIndices = { } as unknown as VertexIndices;\n if (remappedEdges.indexed) {\n const numSegmentEdges = remappedEdges.indexed.edges.length / 6;\n const numSilhouettes = remappedEdges.indexed.silhouettes.length / 10;\n const { width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams(numSegmentEdges, numSilhouettes, maxDimension);\n const data = new Uint8Array(width * height * 4);\n data.set(remappedEdges.indexed.edges.toTypedArray(), 0);\n if (numSilhouettes > 0)\n data.set(remappedEdges.indexed.silhouettes.toTypedArray(), silhouetteStartByteIndex + silhouettePadding);\n\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n edgeIndices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n edgeIndices.setNthIndex(i * 6 + j, i);\n\n edgeTable = {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n };\n }\n\n result.set(id, {\n weight: source.weight,\n linePixels: source.linePixels,\n segments: remappedEdges.segments ? {\n indices: remappedEdges.segments.indices.toVertexIndices(),\n endPointAndQuadIndices: remappedEdges.segments.endPointAndQuadIndices.toUint8Array(),\n } : undefined,\n silhouettes: remappedEdges.silhouettes ? {\n indices: remappedEdges.silhouettes.indices.toVertexIndices(),\n endPointAndQuadIndices: remappedEdges.silhouettes.endPointAndQuadIndices.toUint8Array(),\n normalPairs: remappedEdges.silhouettes.normalPairs.toUint8Array(),\n } : undefined,\n polylineGroups: remappedEdges.polylines ? [{\n polyline: {\n indices: remappedEdges.polylines.indices.toVertexIndices(),\n prevIndices: remappedEdges.polylines.prevIndices.toVertexIndices(),\n nextIndicesAndParams: remappedEdges.polylines.nextIndicesAndParams.toUint8Array(),\n },\n }] : undefined,\n indexed: remappedEdges.indexed ? {\n indices: edgeIndices,\n edges: edgeTable,\n } : undefined,\n });\n }\n\n return result;\n}\n\n/** @internal */\nexport interface SplitMeshArgs extends SplitVertexTableArgs {\n params: MeshParams;\n createMaterial: CreateRenderMaterial;\n}\n\n/** @internal */\nexport function splitMeshParams(args: SplitMeshArgs): Map<number, MeshParams> {\n const result = new Map<number, MeshParams>();\n\n const mat = args.params.surface.material;\n const atlasOffset = undefined !== mat && mat.isAtlas ? mat.vertexTableOffset : undefined;\n const atlasInfo = undefined !== atlasOffset ? { offset: atlasOffset, createMaterial: args.createMaterial } : undefined;\n\n const nodes = VertexTableSplitter.split({\n indices: args.params.surface.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n atlasInfo,\n }, args.computeNodeId);\n\n const edges = args.params.edges ? splitEdges(args.params.edges, nodes, args.maxDimension) : undefined;\n\n for (const [id, node] of nodes) {\n const { vertices, indices, material } = node.buildOutput(args.maxDimension, args.params.surface.material);\n const params: MeshParams = {\n vertices,\n surface: {\n type: args.params.surface.type,\n indices,\n fillFlags: args.params.surface.fillFlags,\n hasBakedLighting: args.params.surface.hasBakedLighting,\n textureMapping: args.params.surface.textureMapping,\n material: material !== undefined ? material : args.params.surface.material,\n },\n edges: edges?.get(id),\n isPlanar: args.params.isPlanar,\n // ###TODO handle aux channels.......\n auxChannels: args.params.auxChannels,\n };\n\n result.set(id, params);\n }\n\n return result;\n}\n\n/** @internal */\nexport interface SplitPolylineArgs extends SplitVertexTableArgs {\n params: PolylineParams;\n}\n\ninterface PolylineNode extends Node {\n prevIndices?: IndexBuffer;\n nextIndicesAndParams?: Uint32ArrayBuilder;\n}\n\n/** @internal */\nexport function splitPolylineParams(args: SplitPolylineArgs): Map<number, PolylineParams> {\n const nodes = VertexTableSplitter.split({\n indices: args.params.polyline.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n }, args.computeNodeId) as Map<number, PolylineNode>;\n\n const src = args.params.polyline;\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const prevIndex of src.prevIndices) {\n if (remapIndex(remappedIndex, prevIndex, nodes)) {\n const node = remappedIndex.node as PolylineNode;\n if (!node.prevIndices) {\n assert(undefined === node.nextIndicesAndParams);\n node.prevIndices = new IndexBuffer(node.indices.numIndices);\n node.nextIndicesAndParams = new Uint32ArrayBuilder({ initialCapacity: node.indices.numIndices });\n } else {\n assert(undefined !== node.nextIndicesAndParams);\n }\n\n node.prevIndices.push(remappedIndex.index);\n\n let nextAndParam = srcNextAndParam[curIndexIndex];\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\n assert(undefined !== newNextIndex);\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\n node.nextIndicesAndParams.push(nextAndParam);\n }\n\n ++curIndexIndex;\n }\n\n const result = new Map<number, PolylineParams>();\n for (const [id, node] of nodes) {\n assert(undefined !== node.prevIndices && undefined !== node.nextIndicesAndParams);\n const { vertices, indices } = node.buildOutput(args.maxDimension);\n const params: PolylineParams = {\n ...args.params,\n vertices,\n polyline: {\n indices,\n prevIndices: node.prevIndices.toVertexIndices(),\n nextIndicesAndParams: node.nextIndicesAndParams.toUint8Array(),\n },\n };\n\n result.set(id, params);\n }\n\n return result;\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  /** @packageDocumentation
2
2
  * @module WebGL
3
3
  */
4
- import { TesselatedPolyline } from "../../../common/internal/render/PolylineParams";
5
4
  import { RenderMemory } from "../../../render/RenderMemory";
6
5
  import { PolylineBuffers } from "./CachedGeometry";
7
6
  import { ColorInfo } from "./ColorInfo";
@@ -12,7 +11,7 @@ import { Target } from "./Target";
12
11
  import { TechniqueId } from "./TechniqueId";
13
12
  import { MeshData } from "./MeshData";
14
13
  import { MeshGeometry } from "./MeshGeometry";
15
- import { SegmentEdgeParams, SilhouetteParams } from "../../../common/internal/render/EdgeParams";
14
+ import { PolylineEdgeGroup, SegmentEdgeParams, SilhouetteParams } from "../../../common/internal/render/EdgeParams";
16
15
  /** @internal */
17
16
  export declare class EdgeGeometry extends MeshGeometry {
18
17
  readonly buffers: BuffersContainer;
@@ -53,19 +52,22 @@ export declare class SilhouetteEdgeGeometry extends EdgeGeometry {
53
52
  /** @internal */
54
53
  export declare class PolylineEdgeGeometry extends MeshGeometry {
55
54
  private _buffers;
55
+ private readonly _colorInfo;
56
+ private readonly _width;
57
+ private readonly _lineCode;
56
58
  get lutBuffers(): BuffersContainer;
57
- static create(mesh: MeshData, polyline: TesselatedPolyline): PolylineEdgeGeometry | undefined;
59
+ static create(mesh: MeshData, group: PolylineEdgeGroup): PolylineEdgeGeometry | undefined;
58
60
  get isDisposed(): boolean;
59
61
  [Symbol.dispose](): void;
60
62
  collectStatistics(stats: RenderMemory.Statistics): void;
61
63
  protected _wantWoWReversal(_target: Target): boolean;
62
- protected _getLineWeight(params: ShaderProgramParams): number;
63
- protected _getLineCode(params: ShaderProgramParams): number;
64
- getColor(target: Target): ColorInfo;
65
64
  get techniqueId(): TechniqueId;
66
65
  getPass(target: Target): import("./RenderFlags").Pass;
67
66
  get renderOrder(): RenderOrder;
68
67
  get polylineBuffers(): PolylineBuffers;
68
+ protected _getLineCode(params: ShaderProgramParams): number;
69
+ protected _getLineWeight(params: ShaderProgramParams): number;
70
+ getColor(target: Target): ColorInfo;
69
71
  wantMonochrome(target: Target): boolean;
70
72
  protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void;
71
73
  private constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/EdgeGeometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EdgeGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/EdgeGeometry.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,12 @@ const core_common_1 = require("@itwin/core-common");
13
13
  const RenderMemory_1 = require("../../../render/RenderMemory");
14
14
  const AttributeMap_1 = require("./AttributeMap");
15
15
  const CachedGeometry_1 = require("./CachedGeometry");
16
+ const ColorInfo_1 = require("./ColorInfo");
16
17
  const GL_1 = require("./GL");
17
18
  const AttributeBuffers_1 = require("./AttributeBuffers");
18
19
  const System_1 = require("./System");
19
20
  const MeshGeometry_1 = require("./MeshGeometry");
21
+ const LineCode_1 = require("../../../common/internal/render/LineCode");
20
22
  /** @internal */
21
23
  class EdgeGeometry extends MeshGeometry_1.MeshGeometry {
22
24
  buffers;
@@ -107,10 +109,13 @@ exports.SilhouetteEdgeGeometry = SilhouetteEdgeGeometry;
107
109
  /** @internal */
108
110
  class PolylineEdgeGeometry extends MeshGeometry_1.MeshGeometry {
109
111
  _buffers;
112
+ _colorInfo;
113
+ _width;
114
+ _lineCode;
110
115
  get lutBuffers() { return this._buffers.buffers; }
111
- static create(mesh, polyline) {
112
- const buffers = CachedGeometry_1.PolylineBuffers.create(polyline);
113
- return undefined !== buffers ? new PolylineEdgeGeometry(polyline.indices.length, buffers, mesh) : undefined;
116
+ static create(mesh, group) {
117
+ const buffers = CachedGeometry_1.PolylineBuffers.create(group.polyline);
118
+ return undefined !== buffers ? new PolylineEdgeGeometry(group.polyline.indices.length, buffers, mesh, group.appearance) : undefined;
114
119
  }
115
120
  get isDisposed() { return this._buffers.isDisposed; }
116
121
  [Symbol.dispose]() {
@@ -120,13 +125,19 @@ class PolylineEdgeGeometry extends MeshGeometry_1.MeshGeometry {
120
125
  this._buffers.collectStatistics(stats, RenderMemory_1.RenderMemory.BufferType.PolylineEdges);
121
126
  }
122
127
  _wantWoWReversal(_target) { return true; }
123
- _getLineWeight(params) { return this.computeEdgeWeight(params); }
124
- _getLineCode(params) { return this.computeEdgeLineCode(params); }
125
- getColor(target) { return this.computeEdgeColor(target); }
126
128
  get techniqueId() { return 1 /* TechniqueId.Polyline */; }
127
129
  getPass(target) { return this.computeEdgePass(target); }
128
130
  get renderOrder() { return this.isPlanar ? 14 /* RenderOrder.PlanarEdge */ : 6 /* RenderOrder.Edge */; }
129
131
  get polylineBuffers() { return this._buffers; }
132
+ _getLineCode(params) {
133
+ return params.target.computeEdgeLineCode(params.renderPass, this._lineCode);
134
+ }
135
+ _getLineWeight(params) {
136
+ return params.target.computeEdgeWeight(params.renderPass, this._width);
137
+ }
138
+ getColor(target) {
139
+ return target.computeEdgeColor(this._colorInfo);
140
+ }
130
141
  wantMonochrome(target) {
131
142
  return target.currentViewFlags.renderMode === core_common_1.RenderMode.Wireframe;
132
143
  }
@@ -137,9 +148,12 @@ class PolylineEdgeGeometry extends MeshGeometry_1.MeshGeometry {
137
148
  gl.drawArrays(GL_1.GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);
138
149
  bufs.unbind();
139
150
  }
140
- constructor(numIndices, buffers, mesh) {
151
+ constructor(numIndices, buffers, mesh, appearance) {
141
152
  super(mesh, numIndices);
142
153
  this._buffers = buffers;
154
+ this._colorInfo = appearance?.color ? ColorInfo_1.ColorInfo.createFromColorDef(appearance.color) : mesh.lut.colorInfo;
155
+ this._width = appearance?.width ?? mesh.edgeWidth;
156
+ this._lineCode = appearance?.linePixels ? (0, LineCode_1.lineCodeFromLinePixels)(appearance?.linePixels) : mesh.edgeLineCode;
143
157
  }
144
158
  }
145
159
  exports.PolylineEdgeGeometry = PolylineEdgeGeometry;
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeGeometry.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/EdgeGeometry.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAsD;AACtD,oDAAgD;AAEhD,+DAA4D;AAC5D,iDAA8C;AAC9C,qDAAmD;AAGnD,6BAA0B;AAC1B,yDAAsF;AAEtF,qCAAkC;AAIlC,iDAA8C;AAG9C,gBAAgB;AAChB,MAAa,YAAa,SAAQ,2BAAY;IAC5B,OAAO,CAAmB;IACvB,QAAQ,CAAe;IACvB,uBAAuB,CAAe;IAEzD,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,IAAoB,SAAS,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;IACrD,IAAoB,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAC7C,IAAoB,YAAY,KAAyC,OAAO,SAAS,CAAC,CAAC,CAAC;IAErF,MAAM,CAAC,MAAM,CAAC,IAAc,EAAE,KAAwB;QAC3D,MAAM,WAAW,GAAG,+BAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,+BAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACpF,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3J,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;eACzB,IAAI,CAAC,QAAQ,CAAC,UAAU;eACxB,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;IAC/C,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAA,sBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAA,sBAAO,EAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACxC,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC;IAES,KAAK,CAAC,YAAoB,EAAE,wBAA2C;QAC/E,MAAM,IAAI,GAAG,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QAE9F,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,eAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAES,gBAAgB,CAAC,OAAe,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,MAA2B,IAAY,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjH,IAAW,WAAW,KAAkB,gCAAwB,CAAC,CAAC;IAClD,OAAO,CAAC,MAAc,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,IAAW,WAAW,KAAkB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,iCAAwB,CAAC,yBAAiB,CAAC,CAAC,CAAC;IAC3F,QAAQ,CAAC,MAAc,IAAe,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAW,sBAAsB,KAAmB,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC1E,cAAc,CAAC,MAAc;QAC3C,OAAO,MAAM,CAAC,gBAAgB,CAAC,UAAU,KAAK,wBAAU,CAAC,SAAS,CAAC;IACrE,CAAC;IAED,YAAsB,OAAqB,EAAE,uBAAqC,EAAE,UAAkB,EAAE,IAAc;QACpH,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,mCAAgB,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,2BAAY,CAAC,aAAa,CAAC,OAAO,4BAAoB,KAAK,CAAC,CAAC;QAC7E,MAAM,0BAA0B,GAAG,2BAAY,CAAC,aAAa,CAAC,0BAA0B,4BAAoB,KAAK,CAAC,CAAC;QACnH,IAAA,qBAAM,EAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QAC9B,IAAA,qBAAM,EAAC,0BAA0B,KAAK,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,mCAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9H,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,uBAAuB,EAAE,CAAC,mCAAgB,CAAC,MAAM,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACjK,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IACzD,CAAC;CACF;AA/DD,oCA+DC;AAED,gBAAgB;AAChB,MAAa,sBAAuB,SAAQ,YAAY;IACrC,YAAY,CAAe;IAE5C,IAAoB,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAE5C,MAAM,CAAC,iBAAiB,CAAC,IAAc,EAAE,MAAwB;QACtE,MAAM,WAAW,GAAG,+BAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,cAAc,GAAG,+BAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACrF,MAAM,aAAa,GAAG,+BAAY,CAAC,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzE,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,cAAc,IAAI,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpN,CAAC;IAED,IAAoB,UAAU,KAAc,OAAO,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvF,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAA,sBAAO,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAEe,iBAAiB,CAAC,KAA8B;QAC9D,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC3H,CAAC;IAED,IAAoB,WAAW,KAAkB,0CAAkC,CAAC,CAAC;IACrF,IAAoB,WAAW,KAAkB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,uCAA8B,CAAC,+BAAuB,CAAC,CAAC,CAAC;IAChI,IAAW,WAAW,KAAmB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEpE,YAAoB,OAAqB,EAAE,uBAAqC,EAAE,WAAyB,EAAE,UAAkB,EAAE,IAAc;QAC7I,KAAK,CAAC,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,2BAAY,CAAC,aAAa,CAAC,WAAW,sCAA8B,KAAK,CAAC,CAAC;QAC/F,IAAA,qBAAM,EAAC,WAAW,KAAK,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,mCAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACtI,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;CACF;AAlCD,wDAkCC;AAED,gBAAgB;AAChB,MAAa,oBAAqB,SAAQ,2BAAY;IAC5C,QAAQ,CAAkB;IAElC,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAElD,MAAM,CAAC,MAAM,CAAC,IAAc,EAAE,QAA4B;QAC/D,MAAM,OAAO,GAAG,gCAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9D,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAA,sBAAO,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAC,KAA8B;QACrD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,2BAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAChF,CAAC;IAES,gBAAgB,CAAC,OAAe,IAAa,OAAO,IAAI,CAAC,CAAC,CAAC;IAClD,cAAc,CAAC,MAA2B,IAAY,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9F,YAAY,CAAC,MAA2B,IAAY,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjG,QAAQ,CAAC,MAAc,IAAe,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAW,WAAW,KAAkB,oCAA4B,CAAC,CAAC;IACtD,OAAO,CAAC,MAAc,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChF,IAAW,WAAW,KAAkB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,iCAAwB,CAAC,yBAAiB,CAAC,CAAC,CAAC;IAC3G,IAAoB,eAAe,KAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhE,cAAc,CAAC,MAAc;QAC3C,OAAO,MAAM,CAAC,gBAAgB,CAAC,UAAU,KAAK,wBAAU,CAAC,SAAS,CAAC;IACrE,CAAC;IAES,KAAK,CAAC,YAAoB,EAAE,wBAA2C;QAC/E,MAAM,EAAE,GAAG,eAAM,CAAC,QAAQ,CAAC;QAC3B,MAAM,IAAI,GAAG,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEvG,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,EAAE,CAAC,UAAU,CAAC,OAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,YAAoB,UAAkB,EAAE,OAAwB,EAAE,IAAc;QAC9E,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;CACF;AA9CD,oDA8CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { RenderMode } from \"@itwin/core-common\";\nimport { TesselatedPolyline } from \"../../../common/internal/render/PolylineParams\";\nimport { RenderMemory } from \"../../../render/RenderMemory\";\nimport { AttributeMap } from \"./AttributeMap\";\nimport { PolylineBuffers } from \"./CachedGeometry\";\nimport { ColorInfo } from \"./ColorInfo\";\nimport { ShaderProgramParams } from \"./DrawCommand\";\nimport { GL } from \"./GL\";\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\nimport { RenderOrder } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport { TechniqueId } from \"./TechniqueId\";\nimport { MeshData } from \"./MeshData\";\nimport { MeshGeometry } from \"./MeshGeometry\";\nimport { SegmentEdgeParams, SilhouetteParams } from \"../../../common/internal/render/EdgeParams\";\n\n/** @internal */\nexport class EdgeGeometry extends MeshGeometry {\n public readonly buffers: BuffersContainer;\n protected readonly _indices: BufferHandle;\n protected readonly _endPointAndQuadIndices: BufferHandle;\n\n public get lutBuffers() { return this.buffers; }\n public override get asSurface() { return undefined; }\n public override get asEdge() { return this; }\n public override get asSilhouette(): SilhouetteEdgeGeometry | undefined { return undefined; }\n\n public static create(mesh: MeshData, edges: SegmentEdgeParams): EdgeGeometry | undefined {\n const indexBuffer = BufferHandle.createArrayBuffer(edges.indices.data);\n const endPointBuffer = BufferHandle.createArrayBuffer(edges.endPointAndQuadIndices);\n return undefined !== indexBuffer && undefined !== endPointBuffer ? new EdgeGeometry(indexBuffer, endPointBuffer, edges.indices.length, mesh) : undefined;\n }\n\n public get isDisposed(): boolean {\n return this.buffers.isDisposed\n && this._indices.isDisposed\n && this._endPointAndQuadIndices.isDisposed;\n }\n\n public [Symbol.dispose]() {\n dispose(this.buffers);\n dispose(this._indices);\n dispose(this._endPointAndQuadIndices);\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n stats.addVisibleEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed);\n }\n\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this.buffers;\n\n bufs.bind();\n System.instance.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\n bufs.unbind();\n }\n\n protected _wantWoWReversal(_target: Target): boolean { return true; }\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\n public get techniqueId(): TechniqueId { return TechniqueId.Edge; }\n public override getPass(target: Target) { return this.computeEdgePass(target); }\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\n public get endPointAndQuadIndices(): BufferHandle { return this._endPointAndQuadIndices; }\n public override wantMonochrome(target: Target): boolean {\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\n }\n\n protected constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, numIndices: number, mesh: MeshData) {\n super(mesh, numIndices);\n this.buffers = BuffersContainer.create();\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Edge, false);\n const attrEndPointAndQuadIndices = AttributeMap.findAttribute(\"a_endPointAndQuadIndices\", TechniqueId.Edge, false);\n assert(attrPos !== undefined);\n assert(attrEndPointAndQuadIndices !== undefined);\n this.buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this.buffers.addBuffer(endPointAndQuadsIndices, [BufferParameters.create(attrEndPointAndQuadIndices.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this._indices = indices;\n this._endPointAndQuadIndices = endPointAndQuadsIndices;\n }\n}\n\n/** @internal */\nexport class SilhouetteEdgeGeometry extends EdgeGeometry {\n private readonly _normalPairs: BufferHandle;\n\n public override get asSilhouette() { return this; }\n\n public static createSilhouettes(mesh: MeshData, params: SilhouetteParams): SilhouetteEdgeGeometry | undefined {\n const indexBuffer = BufferHandle.createArrayBuffer(params.indices.data);\n const endPointBuffer = BufferHandle.createArrayBuffer(params.endPointAndQuadIndices);\n const normalsBuffer = BufferHandle.createArrayBuffer(params.normalPairs);\n return undefined !== indexBuffer && undefined !== endPointBuffer && undefined !== normalsBuffer ? new SilhouetteEdgeGeometry(indexBuffer, endPointBuffer, normalsBuffer, params.indices.length, mesh) : undefined;\n }\n\n public override get isDisposed(): boolean { return super.isDisposed && this._normalPairs.isDisposed; }\n\n public override[Symbol.dispose]() {\n super[Symbol.dispose]();\n dispose(this._normalPairs);\n }\n\n public override collectStatistics(stats: RenderMemory.Statistics): void {\n stats.addSilhouetteEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed + this._normalPairs.bytesUsed);\n }\n\n public override get techniqueId(): TechniqueId { return TechniqueId.SilhouetteEdge; }\n public override get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarSilhouette : RenderOrder.Silhouette; }\n public get normalPairs(): BufferHandle { return this._normalPairs; }\n\n private constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, normalPairs: BufferHandle, numIndices: number, mesh: MeshData) {\n super(indices, endPointAndQuadsIndices, numIndices, mesh);\n const attrNormals = AttributeMap.findAttribute(\"a_normals\", TechniqueId.SilhouetteEdge, false);\n assert(attrNormals !== undefined);\n this.buffers.addBuffer(normalPairs, [BufferParameters.create(attrNormals.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this._normalPairs = normalPairs;\n }\n}\n\n/** @internal */\nexport class PolylineEdgeGeometry extends MeshGeometry {\n private _buffers: PolylineBuffers;\n\n public get lutBuffers() { return this._buffers.buffers; }\n\n public static create(mesh: MeshData, polyline: TesselatedPolyline): PolylineEdgeGeometry | undefined {\n const buffers = PolylineBuffers.create(polyline);\n return undefined !== buffers ? new PolylineEdgeGeometry(polyline.indices.length, buffers, mesh) : undefined;\n }\n\n public get isDisposed(): boolean { return this._buffers.isDisposed; }\n\n public [Symbol.dispose]() {\n dispose(this._buffers);\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n this._buffers.collectStatistics(stats, RenderMemory.BufferType.PolylineEdges);\n }\n\n protected _wantWoWReversal(_target: Target): boolean { return true; }\n protected override _getLineWeight(params: ShaderProgramParams): number { return this.computeEdgeWeight(params); }\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\n public get techniqueId(): TechniqueId { return TechniqueId.Polyline; }\n public override getPass(target: Target) { return this.computeEdgePass(target); }\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\n public override get polylineBuffers(): PolylineBuffers { return this._buffers; }\n\n public override wantMonochrome(target: Target): boolean {\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\n }\n\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\n const gl = System.instance;\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers.buffers;\n\n bufs.bind();\n gl.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\n bufs.unbind();\n }\n\n private constructor(numIndices: number, buffers: PolylineBuffers, mesh: MeshData) {\n super(mesh, numIndices);\n this._buffers = buffers;\n }\n}\n"]}
1
+ {"version":3,"file":"EdgeGeometry.js","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/EdgeGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose } from \"@itwin/core-bentley\";\nimport { EdgeAppearanceOverrides, RenderMode } from \"@itwin/core-common\";\nimport { RenderMemory } from \"../../../render/RenderMemory\";\nimport { AttributeMap } from \"./AttributeMap\";\nimport { PolylineBuffers } from \"./CachedGeometry\";\nimport { ColorInfo } from \"./ColorInfo\";\nimport { ShaderProgramParams } from \"./DrawCommand\";\nimport { GL } from \"./GL\";\nimport { BufferHandle, BufferParameters, BuffersContainer } from \"./AttributeBuffers\";\nimport { RenderOrder } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport { TechniqueId } from \"./TechniqueId\";\nimport { MeshData } from \"./MeshData\";\nimport { MeshGeometry } from \"./MeshGeometry\";\nimport { PolylineEdgeGroup, SegmentEdgeParams, SilhouetteParams } from \"../../../common/internal/render/EdgeParams\";\nimport { lineCodeFromLinePixels } from \"../../../common/internal/render/LineCode\";\n\n/** @internal */\nexport class EdgeGeometry extends MeshGeometry {\n public readonly buffers: BuffersContainer;\n protected readonly _indices: BufferHandle;\n protected readonly _endPointAndQuadIndices: BufferHandle;\n\n public get lutBuffers() { return this.buffers; }\n public override get asSurface() { return undefined; }\n public override get asEdge() { return this; }\n public override get asSilhouette(): SilhouetteEdgeGeometry | undefined { return undefined; }\n\n public static create(mesh: MeshData, edges: SegmentEdgeParams): EdgeGeometry | undefined {\n const indexBuffer = BufferHandle.createArrayBuffer(edges.indices.data);\n const endPointBuffer = BufferHandle.createArrayBuffer(edges.endPointAndQuadIndices);\n return undefined !== indexBuffer && undefined !== endPointBuffer ? new EdgeGeometry(indexBuffer, endPointBuffer, edges.indices.length, mesh) : undefined;\n }\n\n public get isDisposed(): boolean {\n return this.buffers.isDisposed\n && this._indices.isDisposed\n && this._endPointAndQuadIndices.isDisposed;\n }\n\n public [Symbol.dispose]() {\n dispose(this.buffers);\n dispose(this._indices);\n dispose(this._endPointAndQuadIndices);\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n stats.addVisibleEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed);\n }\n\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this.buffers;\n\n bufs.bind();\n System.instance.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\n bufs.unbind();\n }\n\n protected _wantWoWReversal(_target: Target): boolean { return true; }\n protected override _getLineCode(params: ShaderProgramParams): number { return this.computeEdgeLineCode(params); }\n public get techniqueId(): TechniqueId { return TechniqueId.Edge; }\n public override getPass(target: Target) { return this.computeEdgePass(target); }\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\n public override getColor(target: Target): ColorInfo { return this.computeEdgeColor(target); }\n public get endPointAndQuadIndices(): BufferHandle { return this._endPointAndQuadIndices; }\n public override wantMonochrome(target: Target): boolean {\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\n }\n\n protected constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, numIndices: number, mesh: MeshData) {\n super(mesh, numIndices);\n this.buffers = BuffersContainer.create();\n const attrPos = AttributeMap.findAttribute(\"a_pos\", TechniqueId.Edge, false);\n const attrEndPointAndQuadIndices = AttributeMap.findAttribute(\"a_endPointAndQuadIndices\", TechniqueId.Edge, false);\n assert(attrPos !== undefined);\n assert(attrEndPointAndQuadIndices !== undefined);\n this.buffers.addBuffer(indices, [BufferParameters.create(attrPos.location, 3, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this.buffers.addBuffer(endPointAndQuadsIndices, [BufferParameters.create(attrEndPointAndQuadIndices.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this._indices = indices;\n this._endPointAndQuadIndices = endPointAndQuadsIndices;\n }\n}\n\n/** @internal */\nexport class SilhouetteEdgeGeometry extends EdgeGeometry {\n private readonly _normalPairs: BufferHandle;\n\n public override get asSilhouette() { return this; }\n\n public static createSilhouettes(mesh: MeshData, params: SilhouetteParams): SilhouetteEdgeGeometry | undefined {\n const indexBuffer = BufferHandle.createArrayBuffer(params.indices.data);\n const endPointBuffer = BufferHandle.createArrayBuffer(params.endPointAndQuadIndices);\n const normalsBuffer = BufferHandle.createArrayBuffer(params.normalPairs);\n return undefined !== indexBuffer && undefined !== endPointBuffer && undefined !== normalsBuffer ? new SilhouetteEdgeGeometry(indexBuffer, endPointBuffer, normalsBuffer, params.indices.length, mesh) : undefined;\n }\n\n public override get isDisposed(): boolean { return super.isDisposed && this._normalPairs.isDisposed; }\n\n public override[Symbol.dispose]() {\n super[Symbol.dispose]();\n dispose(this._normalPairs);\n }\n\n public override collectStatistics(stats: RenderMemory.Statistics): void {\n stats.addSilhouetteEdges(this._indices.bytesUsed + this._endPointAndQuadIndices.bytesUsed + this._normalPairs.bytesUsed);\n }\n\n public override get techniqueId(): TechniqueId { return TechniqueId.SilhouetteEdge; }\n public override get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarSilhouette : RenderOrder.Silhouette; }\n public get normalPairs(): BufferHandle { return this._normalPairs; }\n\n private constructor(indices: BufferHandle, endPointAndQuadsIndices: BufferHandle, normalPairs: BufferHandle, numIndices: number, mesh: MeshData) {\n super(indices, endPointAndQuadsIndices, numIndices, mesh);\n const attrNormals = AttributeMap.findAttribute(\"a_normals\", TechniqueId.SilhouetteEdge, false);\n assert(attrNormals !== undefined);\n this.buffers.addBuffer(normalPairs, [BufferParameters.create(attrNormals.location, 4, GL.DataType.UnsignedByte, false, 0, 0, false)]);\n this._normalPairs = normalPairs;\n }\n}\n\n/** @internal */\nexport class PolylineEdgeGeometry extends MeshGeometry {\n private _buffers: PolylineBuffers;\n private readonly _colorInfo: ColorInfo;\n private readonly _width: number;\n private readonly _lineCode: number;\n\n public get lutBuffers() { return this._buffers.buffers; }\n\n public static create(mesh: MeshData, group: PolylineEdgeGroup): PolylineEdgeGeometry | undefined {\n const buffers = PolylineBuffers.create(group.polyline);\n return undefined !== buffers ? new PolylineEdgeGeometry(group.polyline.indices.length, buffers, mesh, group.appearance) : undefined;\n }\n\n public get isDisposed(): boolean { return this._buffers.isDisposed; }\n\n public [Symbol.dispose]() {\n dispose(this._buffers);\n }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n this._buffers.collectStatistics(stats, RenderMemory.BufferType.PolylineEdges);\n }\n\n protected _wantWoWReversal(_target: Target): boolean { return true; }\n public get techniqueId(): TechniqueId { return TechniqueId.Polyline; }\n public override getPass(target: Target) { return this.computeEdgePass(target); }\n public get renderOrder(): RenderOrder { return this.isPlanar ? RenderOrder.PlanarEdge : RenderOrder.Edge; }\n public override get polylineBuffers(): PolylineBuffers { return this._buffers; }\n\n protected override _getLineCode(params: ShaderProgramParams): number {\n return params.target.computeEdgeLineCode(params.renderPass, this._lineCode);\n }\n\n protected override _getLineWeight(params: ShaderProgramParams): number {\n return params.target.computeEdgeWeight(params.renderPass, this._width);\n }\n\n public override getColor(target: Target) {\n return target.computeEdgeColor(this._colorInfo);\n }\n\n public override wantMonochrome(target: Target): boolean {\n return target.currentViewFlags.renderMode === RenderMode.Wireframe;\n }\n\n protected _draw(numInstances: number, instanceBuffersContainer?: BuffersContainer): void {\n const gl = System.instance;\n const bufs = instanceBuffersContainer !== undefined ? instanceBuffersContainer : this._buffers.buffers;\n\n bufs.bind();\n gl.drawArrays(GL.PrimitiveType.Triangles, 0, this._numIndices, numInstances);\n bufs.unbind();\n }\n\n private constructor(numIndices: number, buffers: PolylineBuffers, mesh: MeshData, appearance: EdgeAppearanceOverrides | undefined) {\n super(mesh, numIndices);\n this._buffers = buffers;\n\n this._colorInfo = appearance?.color ? ColorInfo.createFromColorDef(appearance.color) : mesh.lut.colorInfo;\n this._width = appearance?.width ?? mesh.edgeWidth;\n this._lineCode = appearance?.linePixels ? lineCodeFromLinePixels(appearance?.linePixels) : mesh.edgeLineCode;\n }\n}\n"]}
@@ -12,6 +12,7 @@ import { Target } from "./Target";
12
12
  import { ShaderProgramParams } from "./DrawCommand";
13
13
  import { RenderOrder } from "./RenderFlags";
14
14
  import { EdgeTable, IndexedEdgeParams } from "../../../common/internal/render/EdgeParams";
15
+ import { ColorInfo } from "./ColorInfo";
15
16
  /** @see [[EdgeTable]]
16
17
  * @internal
17
18
  */
@@ -31,6 +32,9 @@ export declare class EdgeLUT implements WebGLDisposable {
31
32
  export declare class IndexedEdgeGeometry extends MeshGeometry {
32
33
  private readonly _buffers;
33
34
  private readonly _indices;
35
+ private readonly _colorInfo;
36
+ private readonly _width;
37
+ private readonly _lineCode;
34
38
  readonly edgeLut: EdgeLUT;
35
39
  get lutBuffers(): BuffersContainer;
36
40
  get asIndexedEdge(): this;
@@ -42,10 +46,11 @@ export declare class IndexedEdgeGeometry extends MeshGeometry {
42
46
  protected _draw(numInstances: number, instances?: BuffersContainer): void;
43
47
  protected _wantWoWReversal(): boolean;
44
48
  protected _getLineCode(params: ShaderProgramParams): number;
49
+ protected _getLineWeight(params: ShaderProgramParams): number;
50
+ getColor(target: Target): ColorInfo;
45
51
  get techniqueId(): TechniqueId;
46
52
  getPass(target: Target): import("./RenderFlags").Pass;
47
53
  get renderOrder(): RenderOrder.Edge | RenderOrder.PlanarEdge;
48
- getColor(target: Target): import("./ColorInfo").ColorInfo;
49
54
  wantMonochrome(target: Target): boolean;
50
55
  }
51
56
  //# sourceMappingURL=IndexedEdgeGeometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedEdgeGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/IndexedEdgeGeometry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAkC,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAE1F;;GAEG;AACH,qBAAa,OAAQ,YAAW,eAAe;IAC7C,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAE1C,OAAO;IAMA,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;WAIjB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS;IAK3D,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;CACF;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,IAAW,UAAU,qBAA4B;IACjD,IAAoB,aAAa,SAAmB;IAEpD,OAAO;IAUA,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAM/B,IAAW,UAAU,IAAI,OAAO,CAE/B;WAEa,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,SAAS;IAMzF,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAK9D,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAOzE,SAAS,CAAC,gBAAgB,IAAI,OAAO;cAClB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAEpE,IAAW,WAAW,gBAAsC;IAC5C,OAAO,CAAC,MAAM,EAAE,MAAM;IACtC,IAAW,WAAW,8CAAwE;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,cAAc,CAAC,MAAM,EAAE,MAAM;CAC9C"}
1
+ {"version":3,"file":"IndexedEdgeGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/internal/render/webgl/IndexedEdgeGeometry.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAkC,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;GAEG;AACH,qBAAa,OAAQ,YAAW,eAAe;IAC7C,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,iBAAiB,EAAE,MAAM,CAAC;IAE1C,OAAO;IAMA,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;WAIjB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS;IAK3D,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;CACF;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,IAAW,UAAU,qBAA4B;IACjD,IAAoB,aAAa,SAAmB;IAEpD,OAAO;IAcA,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAM/B,IAAW,UAAU,IAAI,OAAO,CAE/B;WAEa,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,SAAS;IAMzF,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAK9D,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAOzE,SAAS,CAAC,gBAAgB,IAAI,OAAO;cAElB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;cAIjD,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAItD,QAAQ,CAAC,MAAM,EAAE,MAAM;IAIvC,IAAW,WAAW,gBAAsC;IAC5C,OAAO,CAAC,MAAM,EAAE,MAAM;IACtC,IAAW,WAAW,8CAAwE;IAC9E,cAAc,CAAC,MAAM,EAAE,MAAM;CAC9C"}
@@ -16,6 +16,8 @@ const MeshGeometry_1 = require("./MeshGeometry");
16
16
  const AttributeMap_1 = require("./AttributeMap");
17
17
  const GL_1 = require("./GL");
18
18
  const System_1 = require("./System");
19
+ const ColorInfo_1 = require("./ColorInfo");
20
+ const LineCode_1 = require("../../../common/internal/render/LineCode");
19
21
  /** @see [[EdgeTable]]
20
22
  * @internal
21
23
  */
@@ -49,10 +51,13 @@ exports.EdgeLUT = EdgeLUT;
49
51
  class IndexedEdgeGeometry extends MeshGeometry_1.MeshGeometry {
50
52
  _buffers;
51
53
  _indices;
54
+ _colorInfo;
55
+ _width;
56
+ _lineCode;
52
57
  edgeLut;
53
58
  get lutBuffers() { return this._buffers; }
54
59
  get asIndexedEdge() { return this; }
55
- constructor(mesh, indices, numIndices, lut) {
60
+ constructor(mesh, indices, numIndices, lut, appearance) {
56
61
  super(mesh, numIndices);
57
62
  this.edgeLut = lut;
58
63
  this._buffers = AttributeBuffers_1.BuffersContainer.create();
@@ -60,6 +65,9 @@ class IndexedEdgeGeometry extends MeshGeometry_1.MeshGeometry {
60
65
  (0, core_bentley_1.assert)(undefined !== attrPos);
61
66
  this._buffers.addBuffer(indices, [AttributeBuffers_1.BufferParameters.create(attrPos.location, 3, GL_1.GL.DataType.UnsignedByte, false, 0, 0, false)]);
62
67
  this._indices = indices;
68
+ this._colorInfo = appearance?.color ? ColorInfo_1.ColorInfo.createFromColorDef(appearance.color) : mesh.lut.colorInfo;
69
+ this._width = appearance?.width ?? mesh.edgeWidth;
70
+ this._lineCode = appearance?.linePixels ? (0, LineCode_1.lineCodeFromLinePixels)(appearance?.linePixels) : mesh.edgeLineCode;
63
71
  }
64
72
  [Symbol.dispose]() {
65
73
  (0, core_bentley_1.dispose)(this._buffers);
@@ -72,7 +80,7 @@ class IndexedEdgeGeometry extends MeshGeometry_1.MeshGeometry {
72
80
  static create(mesh, params) {
73
81
  const indexBuffer = AttributeBuffers_1.BufferHandle.createArrayBuffer(params.indices.data);
74
82
  const lut = EdgeLUT.create(params.edges);
75
- return indexBuffer && lut ? new IndexedEdgeGeometry(mesh, indexBuffer, params.indices.length, lut) : undefined;
83
+ return indexBuffer && lut ? new IndexedEdgeGeometry(mesh, indexBuffer, params.indices.length, lut, params.appearance) : undefined;
76
84
  }
77
85
  collectStatistics(stats) {
78
86
  stats.addIndexedEdges(this._indices.bytesUsed);
@@ -85,11 +93,18 @@ class IndexedEdgeGeometry extends MeshGeometry_1.MeshGeometry {
85
93
  bufs.unbind();
86
94
  }
87
95
  _wantWoWReversal() { return true; }
88
- _getLineCode(params) { return this.computeEdgeLineCode(params); }
96
+ _getLineCode(params) {
97
+ return params.target.computeEdgeLineCode(params.renderPass, this._lineCode);
98
+ }
99
+ _getLineWeight(params) {
100
+ return params.target.computeEdgeWeight(params.renderPass, this._width);
101
+ }
102
+ getColor(target) {
103
+ return target.computeEdgeColor(this._colorInfo);
104
+ }
89
105
  get techniqueId() { return 6 /* TechniqueId.IndexedEdge */; }
90
106
  getPass(target) { return this.computeEdgePass(target); }
91
107
  get renderOrder() { return this.isPlanar ? 14 /* RenderOrder.PlanarEdge */ : 6 /* RenderOrder.Edge */; }
92
- getColor(target) { return this.computeEdgeColor(target); }
93
108
  wantMonochrome(target) { return target.currentViewFlags.renderMode === core_common_1.RenderMode.Wireframe; }
94
109
  }
95
110
  exports.IndexedEdgeGeometry = IndexedEdgeGeometry;