@itwin/core-frontend 3.2.0-dev.1 → 3.2.0-dev.3

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 (159) hide show
  1. package/lib/cjs/HitDetail.js.map +1 -1
  2. package/lib/cjs/render/ParticleCollectionBuilder.d.ts.map +1 -1
  3. package/lib/cjs/render/ParticleCollectionBuilder.js +16 -9
  4. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  5. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  6. package/lib/cjs/render/RenderSystem.js +19 -17
  7. package/lib/cjs/render/RenderSystem.js.map +1 -1
  8. package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -1
  9. package/lib/cjs/render/primitives/EdgeParams.js +3 -1
  10. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  11. package/lib/cjs/render/primitives/PolylineParams.d.ts.map +1 -1
  12. package/lib/cjs/render/primitives/PolylineParams.js +10 -5
  13. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  14. package/lib/cjs/render/primitives/VertexKey.d.ts +11 -8
  15. package/lib/cjs/render/primitives/VertexKey.d.ts.map +1 -1
  16. package/lib/cjs/render/primitives/VertexKey.js +24 -6
  17. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  18. package/lib/cjs/render/primitives/VertexTable.d.ts +15 -2
  19. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  20. package/lib/cjs/render/primitives/VertexTable.js +273 -108
  21. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  22. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  23. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +22 -10
  24. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  25. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts +4 -6
  26. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  27. package/lib/cjs/render/primitives/mesh/MeshBuilder.js +16 -13
  28. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  29. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
  30. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +12 -1
  31. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  32. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +45 -28
  33. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  34. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +107 -146
  35. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  36. package/lib/cjs/render/webgl/CachedGeometry.d.ts +6 -0
  37. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/CachedGeometry.js +6 -0
  39. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  40. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
  41. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/ShaderBuilder.js +12 -5
  43. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  44. package/lib/cjs/render/webgl/VertexLUT.d.ts +2 -1
  45. package/lib/cjs/render/webgl/VertexLUT.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/VertexLUT.js +4 -3
  47. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  48. package/lib/cjs/render/webgl/glsl/Color.js +1 -1
  49. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  50. package/lib/cjs/render/webgl/glsl/Decode.d.ts +6 -0
  51. package/lib/cjs/render/webgl/glsl/Decode.d.ts.map +1 -1
  52. package/lib/cjs/render/webgl/glsl/Decode.js +18 -1
  53. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  54. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  55. package/lib/cjs/render/webgl/glsl/Edge.js +15 -6
  56. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  57. package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
  58. package/lib/cjs/render/webgl/glsl/PointString.js +1 -1
  59. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  60. package/lib/cjs/render/webgl/glsl/Polyline.d.ts +2 -2
  61. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  62. package/lib/cjs/render/webgl/glsl/Polyline.js +24 -9
  63. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  64. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  65. package/lib/cjs/render/webgl/glsl/Surface.js +18 -19
  66. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  67. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  68. package/lib/cjs/render/webgl/glsl/Thematic.js +1 -6
  69. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  70. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  71. package/lib/cjs/render/webgl/glsl/Vertex.js +31 -14
  72. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  73. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  74. package/lib/cjs/tile/GltfReader.js +8 -6
  75. package/lib/cjs/tile/GltfReader.js.map +1 -1
  76. package/lib/cjs/tile/map/BingElevation.d.ts +2 -16
  77. package/lib/cjs/tile/map/BingElevation.d.ts.map +1 -1
  78. package/lib/cjs/tile/map/BingElevation.js +1 -63
  79. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  80. package/lib/esm/HitDetail.js.map +1 -1
  81. package/lib/esm/render/ParticleCollectionBuilder.d.ts.map +1 -1
  82. package/lib/esm/render/ParticleCollectionBuilder.js +17 -10
  83. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  84. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  85. package/lib/esm/render/RenderSystem.js +20 -18
  86. package/lib/esm/render/RenderSystem.js.map +1 -1
  87. package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -1
  88. package/lib/esm/render/primitives/EdgeParams.js +3 -1
  89. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  90. package/lib/esm/render/primitives/PolylineParams.d.ts.map +1 -1
  91. package/lib/esm/render/primitives/PolylineParams.js +11 -6
  92. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  93. package/lib/esm/render/primitives/VertexKey.d.ts +11 -8
  94. package/lib/esm/render/primitives/VertexKey.d.ts.map +1 -1
  95. package/lib/esm/render/primitives/VertexKey.js +24 -6
  96. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  97. package/lib/esm/render/primitives/VertexTable.d.ts +15 -2
  98. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  99. package/lib/esm/render/primitives/VertexTable.js +274 -109
  100. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  101. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  102. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +23 -11
  103. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  104. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts +4 -6
  105. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  106. package/lib/esm/render/primitives/mesh/MeshBuilder.js +17 -14
  107. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  108. package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
  109. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +12 -1
  110. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  111. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +45 -28
  112. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  113. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +108 -144
  114. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  115. package/lib/esm/render/webgl/CachedGeometry.d.ts +6 -0
  116. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  117. package/lib/esm/render/webgl/CachedGeometry.js +6 -0
  118. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  119. package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
  120. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  121. package/lib/esm/render/webgl/ShaderBuilder.js +12 -5
  122. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  123. package/lib/esm/render/webgl/VertexLUT.d.ts +2 -1
  124. package/lib/esm/render/webgl/VertexLUT.d.ts.map +1 -1
  125. package/lib/esm/render/webgl/VertexLUT.js +4 -3
  126. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  127. package/lib/esm/render/webgl/glsl/Color.js +1 -1
  128. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  129. package/lib/esm/render/webgl/glsl/Decode.d.ts +6 -0
  130. package/lib/esm/render/webgl/glsl/Decode.d.ts.map +1 -1
  131. package/lib/esm/render/webgl/glsl/Decode.js +17 -0
  132. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  133. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  134. package/lib/esm/render/webgl/glsl/Edge.js +15 -6
  135. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  136. package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
  137. package/lib/esm/render/webgl/glsl/PointString.js +1 -1
  138. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  139. package/lib/esm/render/webgl/glsl/Polyline.d.ts +2 -2
  140. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  141. package/lib/esm/render/webgl/glsl/Polyline.js +24 -9
  142. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  143. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  144. package/lib/esm/render/webgl/glsl/Surface.js +18 -19
  145. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  146. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  147. package/lib/esm/render/webgl/glsl/Thematic.js +1 -6
  148. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  149. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  150. package/lib/esm/render/webgl/glsl/Vertex.js +32 -15
  151. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  152. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  153. package/lib/esm/tile/GltfReader.js +9 -7
  154. package/lib/esm/tile/GltfReader.js.map +1 -1
  155. package/lib/esm/tile/map/BingElevation.d.ts +2 -16
  156. package/lib/esm/tile/map/BingElevation.d.ts.map +1 -1
  157. package/lib/esm/tile/map/BingElevation.js +1 -63
  158. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  159. package/package.json +20 -20
@@ -9,6 +9,15 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.VertexMap = exports.VertexKey = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
+ function comparePositions(p0, p1, tolerance) {
13
+ let diff = (0, core_bentley_1.compareWithTolerance)(p0.x, p1.x, tolerance.x);
14
+ if (0 === diff) {
15
+ diff = (0, core_bentley_1.compareWithTolerance)(p0.y, p1.y, tolerance.y);
16
+ if (0 === diff)
17
+ diff = (0, core_bentley_1.compareWithTolerance)(p0.z, p1.z, tolerance.z);
18
+ }
19
+ return diff;
20
+ }
12
21
  /** @internal */
13
22
  class VertexKey {
14
23
  constructor(position, fillColor, normal, uvParam) {
@@ -18,7 +27,7 @@ class VertexKey {
18
27
  this.uvParam = uvParam === null || uvParam === void 0 ? void 0 : uvParam.clone();
19
28
  }
20
29
  static create(props) { return new VertexKey(props.position, props.fillColor, props.normal, props.uvParam); }
21
- equals(rhs) {
30
+ equals(rhs, tolerance) {
22
31
  if (this.fillColor !== rhs.fillColor)
23
32
  return false;
24
33
  if (undefined !== this.normal) {
@@ -26,20 +35,20 @@ class VertexKey {
26
35
  if (this.normal.value !== rhs.normal.value)
27
36
  return false;
28
37
  }
29
- if (!this.position.equals(rhs.position))
38
+ if (0 !== comparePositions(this.position, rhs.position, tolerance))
30
39
  return false;
31
40
  if (undefined !== this.uvParam) {
32
41
  (0, core_bentley_1.assert)(undefined !== rhs.uvParam);
33
- return this.uvParam.isAlmostEqual(rhs.uvParam, 0.1);
42
+ return this.uvParam.isAlmostEqual(rhs.uvParam, 0.1); // ###TODO surely this is a typo?
34
43
  }
35
44
  return true;
36
45
  }
37
- compare(rhs) {
46
+ compare(rhs, tolerance) {
38
47
  if (this === rhs)
39
48
  return 0;
40
49
  let diff = this.fillColor - rhs.fillColor;
41
50
  if (0 === diff) {
42
- diff = this.position.compare(rhs.position);
51
+ diff = comparePositions(this.position, rhs.position, tolerance);
43
52
  if (0 === diff) {
44
53
  if (undefined !== this.normal) {
45
54
  (0, core_bentley_1.assert)(undefined !== rhs.normal);
@@ -59,10 +68,19 @@ class VertexKey {
59
68
  exports.VertexKey = VertexKey;
60
69
  /** @internal */
61
70
  class VertexMap extends core_bentley_1.IndexMap {
62
- constructor() { super((lhs, rhs) => lhs.compare(rhs)); }
71
+ constructor(tolerance) {
72
+ super((lhs, rhs) => lhs.compare(rhs, tolerance));
73
+ this._tolerance = tolerance;
74
+ }
63
75
  insertKey(props, onInsert) {
64
76
  return this.insert(VertexKey.create(props), onInsert);
65
77
  }
78
+ arePositionsAlmostEqual(p0, p1) {
79
+ return 0 === this.comparePositions(p0, p1);
80
+ }
81
+ comparePositions(p0, p1) {
82
+ return comparePositions(p0.position, p1.position, this._tolerance);
83
+ }
66
84
  }
67
85
  exports.VertexMap = VertexMap;
68
86
  //# sourceMappingURL=VertexKey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VertexKey.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexKey.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, compareWithTolerance, IndexMap } from \"@itwin/core-bentley\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport { OctEncodedNormal, QPoint3d } from \"@itwin/core-common\";\r\n\r\n/** @internal */\r\nexport interface VertexKeyProps {\r\n position: QPoint3d;\r\n fillColor: number;\r\n normal?: OctEncodedNormal;\r\n uvParam?: Point2d;\r\n}\r\n\r\n/** @internal */\r\nexport class VertexKey {\r\n public readonly position: QPoint3d;\r\n public readonly normal?: OctEncodedNormal;\r\n public readonly uvParam?: Point2d;\r\n public readonly fillColor: number;\r\n\r\n public constructor(position: QPoint3d, fillColor: number, normal?: OctEncodedNormal, uvParam?: Point2d) {\r\n this.position = position.clone();\r\n this.fillColor = fillColor;\r\n this.normal = normal;\r\n this.uvParam = uvParam?.clone();\r\n }\r\n\r\n public static create(props: VertexKeyProps): VertexKey { return new VertexKey(props.position, props.fillColor, props.normal, props.uvParam); }\r\n\r\n public equals(rhs: VertexKey): boolean {\r\n if (this.fillColor !== rhs.fillColor)\r\n return false;\r\n\r\n if (undefined !== this.normal) {\r\n assert(undefined !== rhs.normal);\r\n if (this.normal.value !== rhs.normal.value)\r\n return false;\r\n }\r\n\r\n if (!this.position.equals(rhs.position))\r\n return false;\r\n\r\n if (undefined !== this.uvParam) {\r\n assert(undefined !== rhs.uvParam);\r\n return this.uvParam.isAlmostEqual(rhs.uvParam, 0.1);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public compare(rhs: VertexKey): number {\r\n if (this === rhs)\r\n return 0;\r\n\r\n let diff = this.fillColor - rhs.fillColor;\r\n if (0 === diff) {\r\n diff = this.position.compare(rhs.position);\r\n if (0 === diff) {\r\n if (undefined !== this.normal) {\r\n assert(undefined !== rhs.normal);\r\n diff = this.normal.value - rhs.normal.value;\r\n }\r\n\r\n if (0 === diff && undefined !== this.uvParam) {\r\n assert(undefined !== rhs.uvParam);\r\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.x);\r\n if (0 === diff)\r\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.y);\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class VertexMap extends IndexMap<VertexKey> {\r\n public constructor() { super((lhs, rhs) => lhs.compare(rhs)); }\r\n\r\n public insertKey(props: VertexKeyProps, onInsert?: (vk: VertexKey) => any): number {\r\n return this.insert(VertexKey.create(props), onInsert);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"VertexKey.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexKey.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6E;AAY7E,SAAS,gBAAgB,CAAC,EAAW,EAAE,EAAW,EAAE,SAAiB;IACnE,IAAI,IAAI,GAAG,IAAA,mCAAoB,EAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,IAAI,GAAG,IAAA,mCAAoB,EAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,IAAI;YACZ,IAAI,GAAG,IAAA,mCAAoB,EAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;KACxD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gBAAgB;AAChB,MAAa,SAAS;IAMpB,YAAmB,QAAiB,EAAE,SAAiB,EAAE,MAAyB,EAAE,OAAiB;QACnG,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAqB,IAAe,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvI,MAAM,CAAC,GAAc,EAAE,SAAiB;QAC7C,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS;YAClC,OAAO,KAAK,CAAC;QAEf,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAA,qBAAM,EAAC,SAAS,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK;gBACxC,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,KAAK,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;YAChE,OAAO,KAAK,CAAC;QAEf,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAA,qBAAM,EAAC,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,iCAAiC;SACvF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,OAAO,CAAC,GAAc,EAAE,SAAiB;QAC9C,IAAI,IAAI,KAAK,GAAG;YACd,OAAO,CAAC,CAAC;QAEX,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI,EAAE;YACd,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAChE,IAAI,CAAC,KAAK,IAAI,EAAE;gBACd,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE;oBAC7B,IAAA,qBAAM,EAAC,SAAS,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;oBACjC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7C;gBAED,IAAI,CAAC,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;oBAC5C,IAAA,qBAAM,EAAC,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;oBAClC,IAAI,GAAG,IAAA,mCAAoB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC3D,IAAI,CAAC,KAAK,IAAI;wBACZ,IAAI,GAAG,IAAA,mCAAoB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iBAC9D;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5DD,8BA4DC;AAED,gBAAgB;AAChB,MAAa,SAAU,SAAQ,uBAAmB;IAGhD,YAAmB,SAAiB;QAClC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEM,SAAS,CAAC,KAAqB,EAAE,QAAiC;QACvE,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAEM,uBAAuB,CAAC,EAAkB,EAAE,EAAkB;QACnE,OAAO,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEM,gBAAgB,CAAC,EAAkB,EAAE,EAAkB;QAC5D,OAAO,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;CACF;AAnBD,8BAmBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, compareWithTolerance, IndexMap } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { OctEncodedNormal } from \"@itwin/core-common\";\r\n\r\n/** @internal */\r\nexport interface VertexKeyProps {\r\n position: Point3d;\r\n fillColor: number;\r\n normal?: OctEncodedNormal;\r\n uvParam?: Point2d;\r\n}\r\n\r\nfunction comparePositions(p0: Point3d, p1: Point3d, tolerance: XYAndZ): number {\r\n let diff = compareWithTolerance(p0.x, p1.x, tolerance.x);\r\n if (0 === diff) {\r\n diff = compareWithTolerance(p0.y, p1.y, tolerance.y);\r\n if (0 === diff)\r\n diff = compareWithTolerance(p0.z, p1.z, tolerance.z);\r\n }\r\n\r\n return diff;\r\n}\r\n\r\n/** @internal */\r\nexport class VertexKey {\r\n public readonly position: Point3d;\r\n public readonly normal?: OctEncodedNormal;\r\n public readonly uvParam?: Point2d;\r\n public readonly fillColor: number;\r\n\r\n public constructor(position: Point3d, fillColor: number, normal?: OctEncodedNormal, uvParam?: Point2d) {\r\n this.position = position.clone();\r\n this.fillColor = fillColor;\r\n this.normal = normal;\r\n this.uvParam = uvParam?.clone();\r\n }\r\n\r\n public static create(props: VertexKeyProps): VertexKey { return new VertexKey(props.position, props.fillColor, props.normal, props.uvParam); }\r\n\r\n public equals(rhs: VertexKey, tolerance: XYAndZ): boolean {\r\n if (this.fillColor !== rhs.fillColor)\r\n return false;\r\n\r\n if (undefined !== this.normal) {\r\n assert(undefined !== rhs.normal);\r\n if (this.normal.value !== rhs.normal.value)\r\n return false;\r\n }\r\n\r\n if (0 !== comparePositions(this.position, rhs.position, tolerance))\r\n return false;\r\n\r\n if (undefined !== this.uvParam) {\r\n assert(undefined !== rhs.uvParam);\r\n return this.uvParam.isAlmostEqual(rhs.uvParam, 0.1); // ###TODO surely this is a typo?\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public compare(rhs: VertexKey, tolerance: XYAndZ): number {\r\n if (this === rhs)\r\n return 0;\r\n\r\n let diff = this.fillColor - rhs.fillColor;\r\n if (0 === diff) {\r\n diff = comparePositions(this.position, rhs.position, tolerance);\r\n if (0 === diff) {\r\n if (undefined !== this.normal) {\r\n assert(undefined !== rhs.normal);\r\n diff = this.normal.value - rhs.normal.value;\r\n }\r\n\r\n if (0 === diff && undefined !== this.uvParam) {\r\n assert(undefined !== rhs.uvParam);\r\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.x);\r\n if (0 === diff)\r\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.y);\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class VertexMap extends IndexMap<VertexKey> {\r\n private readonly _tolerance: XYAndZ;\r\n\r\n public constructor(tolerance: XYAndZ) {\r\n super((lhs, rhs) => lhs.compare(rhs, tolerance));\r\n this._tolerance = tolerance;\r\n }\r\n\r\n public insertKey(props: VertexKeyProps, onInsert?: (vk: VertexKey) => any): number {\r\n return this.insert(VertexKey.create(props), onInsert);\r\n }\r\n\r\n public arePositionsAlmostEqual(p0: VertexKeyProps, p1: VertexKeyProps): boolean {\r\n return 0 === this.comparePositions(p0, p1);\r\n }\r\n\r\n public comparePositions(p0: VertexKeyProps, p1: VertexKeyProps): number {\r\n return comparePositions(p0.position, p1.position, this._tolerance);\r\n }\r\n}\r\n"]}
@@ -40,7 +40,13 @@ export declare function computeDimensions(nEntries: number, nRgbaPerEntry: numbe
40
40
  export interface VertexTableProps {
41
41
  /** The rectangular array of vertex data, of size width*height*numRgbaPerVertex bytes. */
42
42
  readonly data: Uint8Array;
43
- /** Quantization parameters for the vertex positions encoded into the array. */
43
+ /** If true, positions are not quantized but instead stored as 32-bit floats.
44
+ * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.
45
+ */
46
+ readonly usesUnquantizedPositions?: boolean;
47
+ /** Quantization parameters for the vertex positions encoded into the array, the positions are quantized;
48
+ * and for deriving the range of positions in the table, whether quantized or not.
49
+ */
44
50
  readonly qparams: QParams3d;
45
51
  /** The number of 4-byte 'RGBA' values in each row of the array. Must be divisible by numRgbaPerVertex. */
46
52
  readonly width: number;
@@ -72,7 +78,13 @@ export interface VertexTableProps {
72
78
  export declare class VertexTable implements VertexTableProps {
73
79
  /** The rectangular array of vertex data, of size width*height*numRgbaPerVertex bytes. */
74
80
  readonly data: Uint8Array;
75
- /** Quantization parameters for the vertex positions encoded into the array. */
81
+ /** If true, positions are not quantized but instead stored as 32-bit floats.
82
+ * [[qparams]] will still be defined; it can be used to derive the range of positions in the table.
83
+ */
84
+ readonly usesUnquantizedPositions?: boolean;
85
+ /** Quantization parameters for the vertex positions encoded into the array, the positions are quantized;
86
+ * and for deriving the range of positions in the table, whether quantized or not.
87
+ */
76
88
  readonly qparams: QParams3d;
77
89
  /** The number of 4-byte 'RGBA' values in each row of the array. Must be divisible by numRgbaPerVertex. */
78
90
  readonly width: number;
@@ -120,6 +132,7 @@ export declare abstract class VertexTableBuilder {
120
132
  abstract get numVertices(): number;
121
133
  abstract get numRgbaPerVertex(): number;
122
134
  abstract get qparams(): QParams3d;
135
+ abstract get usesUnquantizedPositions(): boolean;
123
136
  get uvParams(): QParams2d | undefined;
124
137
  abstract appendVertex(vertIndex: number): void;
125
138
  appendColorTable(colorIndex: ColorIndex): void;
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTable.d.ts","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VertexTable.d.ts","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTable.ts"],"names":[],"mappings":"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"}
@@ -100,6 +100,7 @@ class VertexTable {
100
100
  constructor(props) {
101
101
  this.data = props.data;
102
102
  this.qparams = props.qparams;
103
+ this.usesUnquantizedPositions = !!props.usesUnquantizedPositions;
103
104
  this.width = props.width;
104
105
  this.height = props.height;
105
106
  this.hasTranslucency = true === props.hasTranslucency;
@@ -124,6 +125,7 @@ class VertexTable {
124
125
  return new VertexTable({
125
126
  data,
126
127
  qparams: builder.qparams,
128
+ usesUnquantizedPositions: builder.usesUnquantizedPositions,
127
129
  width: dimensions.width,
128
130
  height: dimensions.height,
129
131
  hasTranslucency: colorIndex.hasAlpha,
@@ -138,7 +140,7 @@ class VertexTable {
138
140
  static createForPolylines(args) {
139
141
  const polylines = args.polylines;
140
142
  if (0 < polylines.length)
141
- return this.buildFrom(new SimpleBuilder(args), args.colors, args.features);
143
+ return this.buildFrom(createPolylineBuilder(args), args.colors, args.features);
142
144
  else
143
145
  return undefined;
144
146
  }
@@ -160,16 +162,16 @@ class MeshParams {
160
162
  }
161
163
  /** Construct from a MeshArgs. */
162
164
  static create(args) {
163
- const builder = MeshBuilder.create(args);
165
+ const builder = createMeshBuilder(args);
164
166
  const vertices = VertexTable.buildFrom(builder, args.colors, args.features);
165
167
  const surfaceIndices = VertexIndices.fromArray(args.vertIndices);
166
168
  const surface = {
167
169
  type: builder.type,
168
170
  indices: surfaceIndices,
169
171
  fillFlags: args.fillFlags,
170
- hasBakedLighting: args.hasBakedLighting,
171
- hasFixedNormals: args.hasFixedNormals,
172
- textureMapping: undefined !== args.texture ? { texture: args.texture, alwaysDisplayed: false } : undefined,
172
+ hasBakedLighting: true === args.hasBakedLighting,
173
+ hasFixedNormals: true === args.hasFixedNormals,
174
+ textureMapping: undefined !== args.textureMapping ? { texture: args.textureMapping.texture, alwaysDisplayed: false } : undefined,
173
175
  material: (0, SurfaceParams_1.createSurfaceMaterial)(args.material),
174
176
  };
175
177
  const channels = undefined !== args.auxChannels ? AuxChannelTable_1.AuxChannelTable.fromChannels(args.auxChannels, vertices.numVertices) : undefined;
@@ -237,123 +239,286 @@ class VertexTableBuilder {
237
239
  }
238
240
  }
239
241
  exports.VertexTableBuilder = VertexTableBuilder;
240
- /**
241
- * Supplies vertex data from a PolylineArgs or MeshArgs. Each vertex consists of 12 bytes:
242
- * pos.x 00
243
- * pos.y 02
244
- * pos.z 04
245
- * colorIndex 06
246
- * featureIndex 08
247
- */
248
- class SimpleBuilder extends VertexTableBuilder {
249
- constructor(args) {
250
- super();
251
- this.args = args;
252
- (0, core_bentley_1.assert)(undefined !== this.args.points);
253
- }
254
- get numVertices() { return this.args.points.length; }
255
- get numRgbaPerVertex() { return 3; }
256
- get qparams() { return this.args.points.params; }
257
- appendVertex(vertIndex) {
258
- this.appendPosition(vertIndex);
259
- this.appendColorIndex(vertIndex);
260
- this.appendFeatureIndex(vertIndex);
261
- }
262
- appendPosition(vertIndex) {
263
- const points = this.args.points;
264
- this.append16(points.list[vertIndex].x);
265
- this.append16(points.list[vertIndex].y);
266
- this.append16(points.list[vertIndex].z);
242
+ var Quantized;
243
+ (function (Quantized) {
244
+ /**
245
+ * Supplies vertex data from a PolylineArgs or MeshArgs. Each vertex consists of 12 bytes:
246
+ * pos.x 00
247
+ * pos.y 02
248
+ * pos.z 04
249
+ * colorIndex 06
250
+ * featureIndex 08 (24 bits)
251
+ * materialIndex 0B (for meshes that use a material atlas; otherwise unused). NOTE: Currently front-end code does not produce material atlases.
252
+ */
253
+ class SimpleBuilder extends VertexTableBuilder {
254
+ constructor(args) {
255
+ super();
256
+ this._qpoints = args.points;
257
+ this.args = args;
258
+ (0, core_bentley_1.assert)(undefined !== this.args.points);
259
+ }
260
+ get numVertices() { return this.args.points.length; }
261
+ get numRgbaPerVertex() { return 3; }
262
+ get usesUnquantizedPositions() { return false; }
263
+ get qparams() {
264
+ return this._qpoints.params;
265
+ }
266
+ appendVertex(vertIndex) {
267
+ this.appendPosition(vertIndex);
268
+ this.appendColorIndex(vertIndex);
269
+ this.appendFeatureIndex(vertIndex);
270
+ }
271
+ appendPosition(vertIndex) {
272
+ this.append16(this._qpoints.list[vertIndex].x);
273
+ this.append16(this._qpoints.list[vertIndex].y);
274
+ this.append16(this._qpoints.list[vertIndex].z);
275
+ }
276
+ appendColorIndex(vertIndex) {
277
+ if (undefined !== this.args.colors.nonUniform) {
278
+ this.append16(this.args.colors.nonUniform.indices[vertIndex]);
279
+ }
280
+ else {
281
+ this.advance(2);
282
+ }
283
+ }
284
+ appendFeatureIndex(vertIndex) {
285
+ if (undefined !== this.args.features.featureIDs) {
286
+ this.append32(this.args.features.featureIDs[vertIndex]);
287
+ }
288
+ else {
289
+ this.advance(4);
290
+ }
291
+ }
267
292
  }
268
- appendColorIndex(vertIndex) {
269
- if (undefined !== this.args.colors.nonUniform) {
270
- this.append16(this.args.colors.nonUniform.indices[vertIndex]);
293
+ Quantized.SimpleBuilder = SimpleBuilder;
294
+ /** Supplies vertex data from a MeshArgs. */
295
+ class MeshBuilder extends SimpleBuilder {
296
+ constructor(args, type) {
297
+ super(args);
298
+ this.type = type;
271
299
  }
272
- else {
273
- this.advance(2);
300
+ static create(args) {
301
+ if (args.isVolumeClassifier)
302
+ return new MeshBuilder(args, SurfaceParams_1.SurfaceType.VolumeClassifier);
303
+ const isLit = undefined !== args.normals && 0 < args.normals.length;
304
+ const isTextured = undefined !== args.textureMapping;
305
+ let uvParams;
306
+ if (args.textureMapping) {
307
+ const uvRange = core_geometry_1.Range2d.createNull();
308
+ const fpts = args.textureMapping.uvParams;
309
+ const pt2d = new core_geometry_1.Point2d();
310
+ if (undefined !== fpts && fpts.length > 0)
311
+ for (let i = 0; i < args.points.length; i++)
312
+ uvRange.extendPoint(core_geometry_1.Point2d.create(fpts[i].x, fpts[i].y, pt2d));
313
+ uvParams = core_common_1.QParams2d.fromRange(uvRange);
314
+ }
315
+ if (isLit)
316
+ return isTextured ? new TexturedLitMeshBuilder(args, uvParams) : new LitMeshBuilder(args);
317
+ else
318
+ return isTextured ? new TexturedMeshBuilder(args, uvParams) : new MeshBuilder(args, SurfaceParams_1.SurfaceType.Unlit);
274
319
  }
275
320
  }
276
- appendFeatureIndex(vertIndex) {
277
- if (undefined !== this.args.features.featureIDs) {
278
- this.append32(this.args.features.featureIDs[vertIndex]);
321
+ Quantized.MeshBuilder = MeshBuilder;
322
+ /** Supplies vertex data from a MeshArgs where each vertex consists of 16 bytes.
323
+ * In addition to the SimpleBuilder data, the final 4 bytes hold the quantized UV params
324
+ * The color index is left uninitialized as it is unused.
325
+ */
326
+ class TexturedMeshBuilder extends MeshBuilder {
327
+ constructor(args, qparams, type = SurfaceParams_1.SurfaceType.Textured) {
328
+ super(args, type);
329
+ this._qpoint = new core_common_1.QPoint2d();
330
+ this._qparams = qparams;
331
+ (0, core_bentley_1.assert)(undefined !== args.textureMapping);
279
332
  }
280
- else {
281
- this.advance(4);
333
+ get numRgbaPerVertex() { return 4; }
334
+ get uvParams() { return this._qparams; }
335
+ appendVertex(vertIndex) {
336
+ this.appendPosition(vertIndex);
337
+ this.appendNormal(vertIndex);
338
+ this.appendFeatureIndex(vertIndex);
339
+ this.appendUVParams(vertIndex);
340
+ }
341
+ appendNormal(_vertIndex) { this.advance(2); } // no normal for unlit meshes
342
+ appendUVParams(vertIndex) {
343
+ this._qpoint.init(this.args.textureMapping.uvParams[vertIndex], this._qparams);
344
+ this.append16(this._qpoint.x);
345
+ this.append16(this._qpoint.y);
282
346
  }
283
347
  }
284
- }
285
- /** Supplies vertex data from a MeshArgs. */
286
- class MeshBuilder extends SimpleBuilder {
287
- constructor(args, type) {
288
- super(args);
289
- this.type = type;
348
+ /** As with TexturedMeshBuilder, but the color index is replaced with the oct-encoded normal value. */
349
+ class TexturedLitMeshBuilder extends TexturedMeshBuilder {
350
+ constructor(args, qparams) {
351
+ super(args, qparams, SurfaceParams_1.SurfaceType.TexturedLit);
352
+ (0, core_bentley_1.assert)(undefined !== args.normals);
353
+ }
354
+ appendNormal(vertIndex) { this.append16(this.args.normals[vertIndex].value); }
290
355
  }
291
- static create(args) {
292
- if (args.isVolumeClassifier)
293
- return new MeshBuilder(args, SurfaceParams_1.SurfaceType.VolumeClassifier);
294
- const isLit = undefined !== args.normals && 0 < args.normals.length;
295
- const isTextured = undefined !== args.texture;
296
- let uvParams;
297
- if (isTextured) {
298
- const uvRange = core_geometry_1.Range2d.createNull();
299
- const fpts = args.textureUv;
300
- const pt2d = new core_geometry_1.Point2d();
301
- if (undefined !== fpts && fpts.length > 0)
302
- for (let i = 0; i < args.points.length; i++)
303
- uvRange.extendPoint(core_geometry_1.Point2d.create(fpts[i].x, fpts[i].y, pt2d));
304
- uvParams = core_common_1.QParams2d.fromRange(uvRange);
305
- }
306
- if (isLit)
307
- return isTextured ? new TexturedLitMeshBuilder(args, uvParams) : new LitMeshBuilder(args);
308
- else
309
- return isTextured ? new TexturedMeshBuilder(args, uvParams) : new MeshBuilder(args, SurfaceParams_1.SurfaceType.Unlit);
356
+ /** 16 bytes. The last 2 bytes are unused; the 2 immediately preceding it hold the oct-encoded normal value. */
357
+ class LitMeshBuilder extends MeshBuilder {
358
+ constructor(args) {
359
+ super(args, SurfaceParams_1.SurfaceType.Lit);
360
+ (0, core_bentley_1.assert)(undefined !== args.normals);
361
+ }
362
+ get numRgbaPerVertex() { return 4; }
363
+ appendVertex(vertIndex) {
364
+ super.appendVertex(vertIndex);
365
+ this.append16(this.args.normals[vertIndex].value);
366
+ this.advance(2); // 2 unused bytes
367
+ }
310
368
  }
311
- }
312
- /** Supplies vertex data from a MeshArgs where each vertex consists of 16 bytes.
313
- * In addition to the SimpleBuilder data, the final 4 bytes hold the quantized UV params
314
- * The color index is left uninitialized as it is unused.
369
+ })(Quantized || (Quantized = {}));
370
+ /** Builders in this namespace store vertex positions as 32-bit floats instead of quantizing to 16-bit unsigned integers.
371
+ * This is preferred for decoration graphics, which might contain ranges of positions that exceed the limits for quantization; if quantized,
372
+ * they could produce visual artifacts.
373
+ * Each builder produces a VertexTable that starts with the following layout:
374
+ * pos.x: 00
375
+ * pos.y: 04
376
+ * pos.z: 08
377
+ * featureIndex: 0C
378
+ * materialIndex:0F (NOTE: frontend code currently doesn't produce material atlases, so this is always zero).
379
+ * Followed (by default) by:
380
+ * colorIndex: 10
381
+ * unused: 12
382
+ * Subclasses may add 4 more bytes and/or overwrite the final 4 bytes above.
315
383
  */
316
- class TexturedMeshBuilder extends MeshBuilder {
317
- constructor(args, qparams, type = SurfaceParams_1.SurfaceType.Textured) {
318
- super(args, type);
319
- this._qpoint = new core_common_1.QPoint2d();
320
- this._qparams = qparams;
321
- (0, core_bentley_1.assert)(undefined !== args.textureUv);
384
+ var Unquantized;
385
+ (function (Unquantized) {
386
+ const u32Array = new Uint32Array(1);
387
+ const f32Array = new Float32Array(u32Array.buffer);
388
+ // colorIndex: 10
389
+ // unused: 12
390
+ class SimpleBuilder extends VertexTableBuilder {
391
+ constructor(args) {
392
+ super();
393
+ (0, core_bentley_1.assert)(!(args.points instanceof core_common_1.QPoint3dList));
394
+ this._qparams3d = core_common_1.QParams3d.fromRange(args.points.range);
395
+ this.args = args;
396
+ this._points = args.points;
397
+ }
398
+ get numVertices() { return this._points.length; }
399
+ get numRgbaPerVertex() { return 5; }
400
+ get usesUnquantizedPositions() { return true; }
401
+ get qparams() { return this._qparams3d; }
402
+ appendVertex(vertIndex) {
403
+ this.appendPosition(vertIndex);
404
+ this.appendFeatureIndex(vertIndex);
405
+ this.appendColorIndex(vertIndex);
406
+ }
407
+ appendFloat32(val) {
408
+ f32Array[0] = val;
409
+ this.append32(u32Array[0]);
410
+ }
411
+ appendPosition(vertIndex) {
412
+ const pt = this._points[vertIndex];
413
+ this.appendFloat32(pt.x);
414
+ this.appendFloat32(pt.y);
415
+ this.appendFloat32(pt.z);
416
+ }
417
+ appendFeatureIndex(vertIndex) {
418
+ if (this.args.features.featureIDs)
419
+ this.append32(this.args.features.featureIDs[vertIndex]);
420
+ else
421
+ this.advance(4);
422
+ }
423
+ _appendColorIndex(vertIndex) {
424
+ if (undefined !== this.args.colors.nonUniform)
425
+ this.append16(this.args.colors.nonUniform.indices[vertIndex]);
426
+ else
427
+ this.advance(2);
428
+ }
429
+ appendColorIndex(vertIndex) {
430
+ this._appendColorIndex(vertIndex);
431
+ this.advance(2);
432
+ }
322
433
  }
323
- get numRgbaPerVertex() { return 4; }
324
- get uvParams() { return this._qparams; }
325
- appendVertex(vertIndex) {
326
- this.appendPosition(vertIndex);
327
- this.appendNormal(vertIndex);
328
- this.appendFeatureIndex(vertIndex);
329
- this.appendUVParams(vertIndex);
434
+ Unquantized.SimpleBuilder = SimpleBuilder;
435
+ class MeshBuilder extends SimpleBuilder {
436
+ constructor(args, type) {
437
+ super(args);
438
+ this.type = type;
439
+ }
440
+ static create(args) {
441
+ if (args.isVolumeClassifier)
442
+ return new MeshBuilder(args, SurfaceParams_1.SurfaceType.VolumeClassifier);
443
+ const isLit = undefined !== args.normals && 0 < args.normals.length;
444
+ const isTextured = undefined !== args.textureMapping;
445
+ let uvParams;
446
+ if (args.textureMapping) {
447
+ const uvRange = core_geometry_1.Range2d.createNull();
448
+ const fpts = args.textureMapping.uvParams;
449
+ const pt2d = new core_geometry_1.Point2d();
450
+ if (undefined !== fpts && fpts.length > 0)
451
+ for (let i = 0; i < args.points.length; i++)
452
+ uvRange.extendPoint(core_geometry_1.Point2d.create(fpts[i].x, fpts[i].y, pt2d));
453
+ uvParams = core_common_1.QParams2d.fromRange(uvRange);
454
+ }
455
+ if (isLit)
456
+ return isTextured ? new TexturedLitMeshBuilder(args, uvParams) : new LitMeshBuilder(args);
457
+ else
458
+ return isTextured ? new TexturedMeshBuilder(args, uvParams) : new MeshBuilder(args, SurfaceParams_1.SurfaceType.Unlit);
459
+ }
330
460
  }
331
- appendNormal(_vertIndex) { this.advance(2); } // no normal for unlit meshes
332
- appendUVParams(vertIndex) {
333
- this._qpoint.init(this.args.textureUv[vertIndex], this._qparams);
334
- this.append16(this._qpoint.x);
335
- this.append16(this._qpoint.y);
461
+ Unquantized.MeshBuilder = MeshBuilder;
462
+ // u: 10
463
+ // v: 12
464
+ class TexturedMeshBuilder extends MeshBuilder {
465
+ constructor(args, qparams, type = SurfaceParams_1.SurfaceType.Textured) {
466
+ super(args, type);
467
+ this._qpoint = new core_common_1.QPoint2d();
468
+ this._qparams = qparams;
469
+ (0, core_bentley_1.assert)(undefined !== args.textureMapping);
470
+ }
471
+ get uvParams() { return this._qparams; }
472
+ appendVertex(vertIndex) {
473
+ super.appendVertex(vertIndex);
474
+ this._qpoint.init(this.args.textureMapping.uvParams[vertIndex], this._qparams);
475
+ this.append16(this._qpoint.x);
476
+ this.append16(this._qpoint.y);
477
+ }
478
+ appendColorIndex() { }
479
+ }
480
+ // u: 10
481
+ // v: 12
482
+ // normal: 14
483
+ // unused: 16
484
+ class TexturedLitMeshBuilder extends TexturedMeshBuilder {
485
+ constructor(args, qparams) {
486
+ super(args, qparams, SurfaceParams_1.SurfaceType.TexturedLit);
487
+ (0, core_bentley_1.assert)(undefined !== args.normals);
488
+ }
489
+ get numRgbaPerVertex() { return 6; }
490
+ appendVertex(vertIndex) {
491
+ super.appendVertex(vertIndex);
492
+ this.append16(this.args.normals[vertIndex].value);
493
+ this.advance(2);
494
+ }
336
495
  }
337
- }
338
- /** As with TexturedMeshBuilder, but the color index is replaced with the oct-encoded normal value. */
339
- class TexturedLitMeshBuilder extends TexturedMeshBuilder {
340
- constructor(args, qparams) {
341
- super(args, qparams, SurfaceParams_1.SurfaceType.TexturedLit);
342
- (0, core_bentley_1.assert)(undefined !== args.normals);
496
+ // color: 10
497
+ // normal: 12
498
+ class LitMeshBuilder extends MeshBuilder {
499
+ constructor(args) {
500
+ super(args, SurfaceParams_1.SurfaceType.Lit);
501
+ (0, core_bentley_1.assert)(undefined !== args.normals);
502
+ }
503
+ appendColorIndex(vertIndex) {
504
+ super._appendColorIndex(vertIndex);
505
+ }
506
+ appendVertex(vertIndex) {
507
+ super.appendVertex(vertIndex);
508
+ this.append16(this.args.normals[vertIndex].value);
509
+ }
343
510
  }
344
- appendNormal(vertIndex) { this.append16(this.args.normals[vertIndex].value); }
511
+ })(Unquantized || (Unquantized = {}));
512
+ function createMeshBuilder(args) {
513
+ if (args.points instanceof core_common_1.QPoint3dList)
514
+ return Quantized.MeshBuilder.create(args); // wtf compiler?
515
+ else
516
+ return Unquantized.MeshBuilder.create(args); // seriously wtf?
345
517
  }
346
- /** 16 bytes. The last 2 bytes are unused; the 2 immediately preceding it hold the oct-encoded normal value. */
347
- class LitMeshBuilder extends MeshBuilder {
348
- constructor(args) {
349
- super(args, SurfaceParams_1.SurfaceType.Lit);
350
- (0, core_bentley_1.assert)(undefined !== args.normals);
351
- }
352
- get numRgbaPerVertex() { return 4; }
353
- appendVertex(vertIndex) {
354
- super.appendVertex(vertIndex);
355
- this.append16(this.args.normals[vertIndex].value);
356
- this.advance(2); // 2 unused bytes
357
- }
518
+ function createPolylineBuilder(args) {
519
+ if (args.points instanceof core_common_1.QPoint3dList)
520
+ return new Quantized.SimpleBuilder(args); // wtf compiler?
521
+ else
522
+ return new Unquantized.SimpleBuilder(args); // seriously wtf?
358
523
  }
359
524
  //# sourceMappingURL=VertexTable.js.map