@itwin/core-frontend 3.2.0-dev.29 → 3.2.0-dev.33

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 (134) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/cjs/ViewManager.d.ts.map +1 -1
  3. package/lib/cjs/ViewManager.js +1 -0
  4. package/lib/cjs/ViewManager.js.map +1 -1
  5. package/lib/cjs/render/primitives/VertexTable.d.ts +1 -1
  6. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  7. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  8. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +0 -1
  9. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  10. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +1 -1
  11. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  12. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
  13. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  14. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  15. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  16. package/lib/cjs/render/webgl/DrawCommand.js +2 -1
  17. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  18. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +5 -4
  19. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/ShaderBuilder.js +7 -6
  21. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  22. package/lib/cjs/render/webgl/Technique.d.ts +4 -2
  23. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/Technique.js +148 -120
  25. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  26. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -3
  27. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  28. package/lib/cjs/render/webgl/TechniqueFlags.js +17 -4
  29. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  30. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/glsl/Animation.js +2 -0
  32. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  33. package/lib/cjs/render/webgl/glsl/Color.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/glsl/Color.js +8 -7
  35. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  36. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -2
  37. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/glsl/Edge.js +6 -10
  39. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  40. package/lib/cjs/render/webgl/glsl/PointString.d.ts +3 -3
  41. package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/glsl/PointString.js +6 -6
  43. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  44. package/lib/cjs/render/webgl/glsl/Polyline.d.ts +3 -3
  45. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/glsl/Polyline.js +6 -10
  47. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  48. package/lib/cjs/render/webgl/glsl/Surface.d.ts +2 -2
  49. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  50. package/lib/cjs/render/webgl/glsl/Surface.js +33 -16
  51. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  52. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +3 -1
  53. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  54. package/lib/cjs/render/webgl/glsl/Vertex.js +139 -37
  55. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  56. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -1
  57. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  58. package/lib/cjs/tile/RealityTileLoader.js +29 -6
  59. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  60. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  61. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  62. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  63. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  64. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  65. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  66. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  67. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  68. package/lib/esm/ViewManager.d.ts.map +1 -1
  69. package/lib/esm/ViewManager.js +1 -0
  70. package/lib/esm/ViewManager.js.map +1 -1
  71. package/lib/esm/render/primitives/VertexTable.d.ts +1 -1
  72. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  73. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  74. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +0 -1
  75. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  76. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +1 -1
  77. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  78. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
  79. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  80. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  81. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  82. package/lib/esm/render/webgl/DrawCommand.js +2 -1
  83. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  84. package/lib/esm/render/webgl/ShaderBuilder.d.ts +5 -4
  85. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  86. package/lib/esm/render/webgl/ShaderBuilder.js +7 -6
  87. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  88. package/lib/esm/render/webgl/Technique.d.ts +4 -2
  89. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  90. package/lib/esm/render/webgl/Technique.js +148 -120
  91. package/lib/esm/render/webgl/Technique.js.map +1 -1
  92. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -3
  93. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  94. package/lib/esm/render/webgl/TechniqueFlags.js +17 -4
  95. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  96. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  97. package/lib/esm/render/webgl/glsl/Animation.js +2 -0
  98. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  99. package/lib/esm/render/webgl/glsl/Color.d.ts.map +1 -1
  100. package/lib/esm/render/webgl/glsl/Color.js +8 -7
  101. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  102. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -2
  103. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  104. package/lib/esm/render/webgl/glsl/Edge.js +7 -11
  105. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  106. package/lib/esm/render/webgl/glsl/PointString.d.ts +3 -3
  107. package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
  108. package/lib/esm/render/webgl/glsl/PointString.js +6 -6
  109. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  110. package/lib/esm/render/webgl/glsl/Polyline.d.ts +3 -3
  111. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  112. package/lib/esm/render/webgl/glsl/Polyline.js +7 -11
  113. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  114. package/lib/esm/render/webgl/glsl/Surface.d.ts +2 -2
  115. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  116. package/lib/esm/render/webgl/glsl/Surface.js +33 -16
  117. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  118. package/lib/esm/render/webgl/glsl/Vertex.d.ts +3 -1
  119. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  120. package/lib/esm/render/webgl/glsl/Vertex.js +138 -37
  121. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  122. package/lib/esm/tile/RealityTileLoader.d.ts +1 -1
  123. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  124. package/lib/esm/tile/RealityTileLoader.js +30 -7
  125. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  126. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  127. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  128. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  129. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  130. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  131. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  132. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  133. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  134. package/package.json +20 -20
@@ -140,9 +140,9 @@ export class VariedTechnique {
140
140
  this._clippingPrograms[index] = createClippingProgram(builder);
141
141
  assert(this._clippingPrograms[index] !== undefined);
142
142
  }
143
- addHiliteShader(gl, instanced, classified, create) {
144
- const builder = create(instanced, classified);
145
- scratchHiliteFlags.initForHilite(0, instanced, classified);
143
+ addHiliteShader(gl, instanced, classified, posType, create) {
144
+ const builder = create(instanced, classified, posType);
145
+ scratchHiliteFlags.initForHilite(0, instanced, classified, posType);
146
146
  this.addShader(builder, scratchHiliteFlags, gl);
147
147
  }
148
148
  addTranslucentShader(builder, flags, gl) {
@@ -202,38 +202,40 @@ export class VariedTechnique {
202
202
  }
203
203
  }
204
204
  }
205
+ const positionTypes = ["quantized", "unquantized"];
205
206
  class SurfaceTechnique extends VariedTechnique {
206
207
  constructor(gl) {
207
- // 3 base classified variations - 1 per feature mode.
208
- // Plus thematic variant of each and shadowable variant of each = 9
209
- // Plus translucent variant of each of those = 18
210
- // Plus 1 hilite shader = 19
211
- super(SurfaceTechnique._kClassified + 19);
208
+ super(SurfaceTechnique._kUnquantized * 2);
212
209
  this._earlyZFlags = [
213
210
  TechniqueFlags.fromDescription("Opaque-Hilite-Overrides"),
214
211
  TechniqueFlags.fromDescription("Opaque-Instanced-Hilite-Overrides"),
215
212
  TechniqueFlags.fromDescription("Opaque-Hilite-Classified"),
213
+ TechniqueFlags.fromDescription("Unquantized-Opaque-Hilite-Overrides"),
214
+ TechniqueFlags.fromDescription("Unquantized-Opaque-Instanced-Hilite-Overrides"),
215
+ TechniqueFlags.fromDescription("Unquantized-Opaque-Hilite-Classified"),
216
216
  ];
217
217
  const flags = scratchTechniqueFlags;
218
- for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
219
- this.addHiliteShader(gl, instanced, 0 /* No */, createSurfaceHiliter);
220
- for (let iAnimate = 0 /* No */; iAnimate <= 1 /* Yes */; iAnimate++) {
221
- for (let shadowable = 0 /* No */; shadowable <= 1 /* Yes */; shadowable++) {
222
- for (let wiremesh = 0 /* No */; wiremesh <= 1 /* Yes */; wiremesh++) {
223
- for (let thematic = 0 /* No */; thematic <= 1 /* Yes */; thematic++) {
224
- for (let edgeTestNeeded = 0 /* No */; edgeTestNeeded <= 1 /* Yes */; edgeTestNeeded++) {
225
- for (const featureMode of featureModes) {
226
- for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {
227
- if (0 /* None */ !== featureMode || 0 /* No */ === edgeTestNeeded) {
228
- if (1 /* Yes */ === thematic && 1 /* Yes */ === shadowable)
229
- continue; // currently this combination is disallowed.
230
- flags.reset(featureMode, instanced, shadowable, thematic);
231
- flags.isAnimated = iAnimate;
232
- flags.isEdgeTestNeeded = edgeTestNeeded;
233
- flags.isTranslucent = 1 === iTranslucent;
234
- flags.isWiremesh = wiremesh;
235
- const builder = createSurfaceBuilder(flags);
236
- this.addShader(builder, flags, gl);
218
+ for (const posType of positionTypes) {
219
+ for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
220
+ this.addHiliteShader(gl, instanced, 0 /* No */, posType, createSurfaceHiliter);
221
+ for (let iAnimate = 0 /* No */; iAnimate <= 1 /* Yes */; iAnimate++) {
222
+ for (let shadowable = 0 /* No */; shadowable <= 1 /* Yes */; shadowable++) {
223
+ for (let wiremesh = 0 /* No */; wiremesh <= 1 /* Yes */; wiremesh++) {
224
+ for (let thematic = 0 /* No */; thematic <= 1 /* Yes */; thematic++) {
225
+ for (let edgeTestNeeded = 0 /* No */; edgeTestNeeded <= 1 /* Yes */; edgeTestNeeded++) {
226
+ for (const featureMode of featureModes) {
227
+ for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {
228
+ if (0 /* None */ !== featureMode || 0 /* No */ === edgeTestNeeded) {
229
+ if (1 /* Yes */ === thematic && 1 /* Yes */ === shadowable)
230
+ continue; // currently this combination is disallowed.
231
+ flags.reset(featureMode, instanced, shadowable, thematic, posType);
232
+ flags.isAnimated = iAnimate;
233
+ flags.isEdgeTestNeeded = edgeTestNeeded;
234
+ flags.isTranslucent = 1 === iTranslucent;
235
+ flags.isWiremesh = wiremesh;
236
+ const builder = createSurfaceBuilder(flags);
237
+ this.addShader(builder, flags, gl);
238
+ }
237
239
  }
238
240
  }
239
241
  }
@@ -243,20 +245,23 @@ class SurfaceTechnique extends VariedTechnique {
243
245
  }
244
246
  }
245
247
  }
246
- this.addHiliteShader(gl, 0 /* No */, 1 /* Yes */, createSurfaceHiliter);
247
- for (let translucent = 0; translucent < 2; translucent++) {
248
- for (let shadowable = 0 /* No */; shadowable <= 1 /* Yes */; shadowable++) {
249
- for (let thematic = 0 /* No */; thematic <= 1 /* Yes */; thematic++) {
250
- for (const featureMode of featureModes) {
251
- if (1 /* Yes */ === thematic && 1 /* Yes */ === shadowable)
252
- continue; // currently this combination is disallowed.
253
- flags.reset(featureMode, 0 /* No */, shadowable, thematic);
254
- flags.isClassified = 1 /* Yes */;
255
- flags.isTranslucent = (0 !== translucent);
256
- const builder = createSurfaceBuilder(flags);
257
- if (flags.isTranslucent)
258
- addTranslucency(builder);
259
- this.addShader(builder, flags, gl);
248
+ this.addHiliteShader(gl, 0 /* No */, 1 /* Yes */, "quantized", createSurfaceHiliter);
249
+ this.addHiliteShader(gl, 0 /* No */, 1 /* Yes */, "unquantized", createSurfaceHiliter);
250
+ for (const posType of positionTypes) {
251
+ for (let translucent = 0; translucent < 2; translucent++) {
252
+ for (let shadowable = 0 /* No */; shadowable <= 1 /* Yes */; shadowable++) {
253
+ for (let thematic = 0 /* No */; thematic <= 1 /* Yes */; thematic++) {
254
+ for (const featureMode of featureModes) {
255
+ if (1 /* Yes */ === thematic && 1 /* Yes */ === shadowable)
256
+ continue; // currently this combination is disallowed.
257
+ flags.reset(featureMode, 0 /* No */, shadowable, thematic, posType);
258
+ flags.isClassified = 1 /* Yes */;
259
+ flags.isTranslucent = (0 !== translucent);
260
+ const builder = createSurfaceBuilder(flags);
261
+ if (flags.isTranslucent)
262
+ addTranslucency(builder);
263
+ this.addShader(builder, flags, gl);
264
+ }
260
265
  }
261
266
  }
262
267
  }
@@ -266,13 +271,14 @@ class SurfaceTechnique extends VariedTechnique {
266
271
  get _debugDescription() { return "Surface"; }
267
272
  computeShaderIndex(flags) {
268
273
  assert(!(flags.isThematic && flags.isShadowable));
274
+ const idxOffset = flags.positionType === "unquantized" ? SurfaceTechnique._kUnquantized : 0;
269
275
  if (flags.isClassified) {
270
276
  assert(!flags.isAnimated);
271
277
  assert(!flags.isInstanced);
272
278
  assert(!flags.isEdgeTestNeeded);
273
279
  // First classified shader is for hilite
274
280
  if (flags.isHilite)
275
- return SurfaceTechnique._kClassified;
281
+ return SurfaceTechnique._kClassified + idxOffset;
276
282
  // The rest are organized in 3 groups of 6 - one group per feature mode.
277
283
  // Each group contains opaque, translucent, opaque+thematic, translucent+thematic, opaque+shadowable, and translucent+shadowable variants.
278
284
  let baseIndex = SurfaceTechnique._kClassified + 1;
@@ -283,11 +289,11 @@ class SurfaceTechnique extends VariedTechnique {
283
289
  if (flags.isThematic)
284
290
  baseIndex += 4;
285
291
  const featureOffset = 6 * flags.featureMode;
286
- return baseIndex + featureOffset;
292
+ return baseIndex + featureOffset + idxOffset;
287
293
  }
288
294
  else if (flags.isHilite) {
289
295
  assert(flags.hasFeatures);
290
- return SurfaceTechnique._kHilite + flags.isInstanced;
296
+ return SurfaceTechnique._kHilite + flags.isInstanced + idxOffset;
291
297
  }
292
298
  assert(flags.hasFeatures || flags.isEdgeTestNeeded === 0 /* No */);
293
299
  let index = flags.isTranslucent ? SurfaceTechnique._kTranslucent : SurfaceTechnique._kOpaque;
@@ -300,7 +306,7 @@ class SurfaceTechnique extends VariedTechnique {
300
306
  index += SurfaceTechnique._kEdgeTestNeeded + (flags.featureMode - 1) * SurfaceTechnique._kFeature;
301
307
  else
302
308
  index += SurfaceTechnique._kFeature * flags.featureMode;
303
- return index;
309
+ return index + idxOffset;
304
310
  }
305
311
  }
306
312
  SurfaceTechnique._kOpaque = 0;
@@ -316,49 +322,59 @@ SurfaceTechnique._kHilite = SurfaceTechnique._kEdgeTestNeeded + SurfaceTechnique
316
322
  // Classifiers are never animated or instanced. They do support shadows, thematic display, and translucency.
317
323
  // There are 3 base variations - 1 per feature mode - each with translucent/shadowed/thematic variants; plus 1 for hilite.
318
324
  SurfaceTechnique._kClassified = SurfaceTechnique._kHilite + numHiliteVariants;
325
+ // 3 base classified variations - 1 per feature mode.
326
+ // Plus thematic variant of each and shadowable variant of each = 9
327
+ // Plus translucent variant of each of those = 18
328
+ // Plus 1 hilite shader = 19
329
+ SurfaceTechnique._kUnquantized = SurfaceTechnique._kClassified + 19;
319
330
  class PolylineTechnique extends VariedTechnique {
320
331
  constructor(gl) {
321
- super(PolylineTechnique._kHilite + numHiliteVariants);
332
+ super(PolylineTechnique._kUnquantized * 2);
322
333
  this._earlyZFlags = [
323
334
  TechniqueFlags.fromDescription("Opaque-Hilite-Overrides"),
324
335
  TechniqueFlags.fromDescription("Opaque-Instanced-Hilite-Overrides"),
336
+ TechniqueFlags.fromDescription("Unquantized-Opaque-Hilite-Overrides"),
337
+ TechniqueFlags.fromDescription("Unquantized-Opaque-Instanced-Hilite-Overrides"),
325
338
  ];
326
339
  const flags = scratchTechniqueFlags;
327
- for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
328
- this.addHiliteShader(gl, instanced, 0 /* No */, createPolylineHiliter);
329
- for (const featureMode of featureModes) {
330
- flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */);
331
- const builder = createPolylineBuilder(instanced);
332
- addUnlitMonochrome(builder.frag);
333
- // The translucent shaders do not need the element IDs.
334
- const builderTrans = createPolylineBuilder(instanced);
335
- addUnlitMonochrome(builderTrans.frag);
336
- if (2 /* Overrides */ === featureMode) {
337
- addFeatureSymbology(builderTrans, featureMode, 31 /* Linear */);
338
- addFeatureSymbology(builder, featureMode, 31 /* Linear */);
339
- this.addTranslucentShader(builderTrans, flags, gl);
340
- }
341
- else {
342
- this.addTranslucentShader(builderTrans, flags, gl);
343
- addFeatureSymbology(builder, featureMode, 0 /* None */);
340
+ for (const posType of positionTypes) {
341
+ for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
342
+ this.addHiliteShader(gl, instanced, 0 /* No */, posType, (inst, _class, pos) => createPolylineHiliter(inst, pos));
343
+ for (const featureMode of featureModes) {
344
+ flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */, posType);
345
+ const builder = createPolylineBuilder(instanced, posType);
346
+ addUnlitMonochrome(builder.frag);
347
+ // The translucent shaders do not need the element IDs.
348
+ const builderTrans = createPolylineBuilder(instanced, posType);
349
+ addUnlitMonochrome(builderTrans.frag);
350
+ if (2 /* Overrides */ === featureMode) {
351
+ addFeatureSymbology(builderTrans, featureMode, 31 /* Linear */);
352
+ addFeatureSymbology(builder, featureMode, 31 /* Linear */);
353
+ this.addTranslucentShader(builderTrans, flags, gl);
354
+ }
355
+ else {
356
+ this.addTranslucentShader(builderTrans, flags, gl);
357
+ addFeatureSymbology(builder, featureMode, 0 /* None */);
358
+ }
359
+ this.addFeatureId(builder, featureMode);
360
+ flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */, posType);
361
+ this.addShader(builder, flags, gl);
344
362
  }
345
- this.addFeatureId(builder, featureMode);
346
- flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */);
347
- this.addShader(builder, flags, gl);
348
363
  }
349
364
  }
350
365
  this.finishConstruction();
351
366
  }
352
367
  get _debugDescription() { return "Polyline"; }
353
368
  computeShaderIndex(flags) {
369
+ const idxOffset = flags.positionType === "unquantized" ? PolylineTechnique._kUnquantized : 0;
354
370
  if (flags.isHilite) {
355
371
  assert(flags.hasFeatures);
356
- return PolylineTechnique._kHilite + flags.isInstanced;
372
+ return PolylineTechnique._kHilite + flags.isInstanced + idxOffset;
357
373
  }
358
374
  let index = flags.isTranslucent ? PolylineTechnique._kTranslucent : PolylineTechnique._kOpaque;
359
375
  index += PolylineTechnique._kFeature * flags.featureMode;
360
376
  index += PolylineTechnique._kInstanced * flags.isInstanced;
361
- return index;
377
+ return index + idxOffset;
362
378
  }
363
379
  }
364
380
  PolylineTechnique._kOpaque = 0;
@@ -366,34 +382,37 @@ PolylineTechnique._kTranslucent = 1;
366
382
  PolylineTechnique._kInstanced = 2;
367
383
  PolylineTechnique._kFeature = 4;
368
384
  PolylineTechnique._kHilite = numFeatureVariants(PolylineTechnique._kFeature);
385
+ PolylineTechnique._kUnquantized = PolylineTechnique._kHilite + numHiliteVariants;
369
386
  class EdgeTechnique extends VariedTechnique {
370
387
  constructor(gl, type) {
371
- super(numFeatureVariants(EdgeTechnique._kFeature));
388
+ super(EdgeTechnique._kUnquantized * 2);
372
389
  this._type = type;
373
390
  const flags = scratchTechniqueFlags;
374
- for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
375
- for (let iAnimate = 0 /* No */; iAnimate <= 1 /* Yes */; iAnimate++) {
376
- for (const featureMode of featureModes) {
377
- flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */);
378
- flags.isAnimated = iAnimate;
379
- const builder = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated);
380
- addUnlitMonochrome(builder.frag);
381
- // The translucent shaders do not need the element IDs.
382
- const builderTrans = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated);
383
- addUnlitMonochrome(builderTrans.frag);
384
- if (2 /* Overrides */ === featureMode) {
385
- addFeatureSymbology(builderTrans, featureMode, 31 /* Linear */);
386
- addFeatureSymbology(builder, featureMode, 31 /* Linear */);
387
- this.addTranslucentShader(builderTrans, flags, gl);
388
- }
389
- else {
390
- this.addTranslucentShader(builderTrans, flags, gl);
391
- addFeatureSymbology(builder, featureMode, 0 /* None */);
391
+ for (const posType of positionTypes) {
392
+ for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
393
+ for (let iAnimate = 0 /* No */; iAnimate <= 1 /* Yes */; iAnimate++) {
394
+ for (const featureMode of featureModes) {
395
+ flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */, posType);
396
+ flags.isAnimated = iAnimate;
397
+ const builder = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated, posType);
398
+ addUnlitMonochrome(builder.frag);
399
+ // The translucent shaders do not need the element IDs.
400
+ const builderTrans = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated, posType);
401
+ addUnlitMonochrome(builderTrans.frag);
402
+ if (2 /* Overrides */ === featureMode) {
403
+ addFeatureSymbology(builderTrans, featureMode, 31 /* Linear */);
404
+ addFeatureSymbology(builder, featureMode, 31 /* Linear */);
405
+ this.addTranslucentShader(builderTrans, flags, gl);
406
+ }
407
+ else {
408
+ this.addTranslucentShader(builderTrans, flags, gl);
409
+ addFeatureSymbology(builder, featureMode, 0 /* None */);
410
+ }
411
+ this.addFeatureId(builder, featureMode);
412
+ flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */, posType);
413
+ flags.isAnimated = iAnimate;
414
+ this.addShader(builder, flags, gl);
392
415
  }
393
- this.addFeatureId(builder, featureMode);
394
- flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */);
395
- flags.isAnimated = iAnimate;
396
- this.addShader(builder, flags, gl);
397
416
  }
398
417
  }
399
418
  }
@@ -407,6 +426,8 @@ class EdgeTechnique extends VariedTechnique {
407
426
  index += EdgeTechnique._kAnimated;
408
427
  if (flags.isInstanced)
409
428
  index += EdgeTechnique._kInstanced;
429
+ if ("unquantized" === flags.positionType)
430
+ index += EdgeTechnique._kUnquantized;
410
431
  return index;
411
432
  }
412
433
  }
@@ -415,45 +436,49 @@ EdgeTechnique._kTranslucent = 1;
415
436
  EdgeTechnique._kAnimated = 2;
416
437
  EdgeTechnique._kInstanced = 4;
417
438
  EdgeTechnique._kFeature = 8;
439
+ EdgeTechnique._kUnquantized = numFeatureVariants(EdgeTechnique._kFeature);
418
440
  class PointStringTechnique extends VariedTechnique {
419
441
  constructor(gl) {
420
- super((PointStringTechnique._kHilite + numHiliteVariants));
442
+ super(PointStringTechnique._kUnquantized * 2);
421
443
  const flags = scratchTechniqueFlags;
422
- for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
423
- this.addHiliteShader(gl, instanced, 0 /* No */, createPointStringHiliter);
424
- for (const featureMode of featureModes) {
425
- flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */);
426
- const builder = createPointStringBuilder(instanced);
427
- addUnlitMonochrome(builder.frag);
428
- // The translucent shaders do not need the element IDs.
429
- const builderTrans = createPointStringBuilder(instanced);
430
- addUnlitMonochrome(builderTrans.frag);
431
- if (2 /* Overrides */ === featureMode) {
432
- addFeatureSymbology(builderTrans, featureMode, 29 /* Point */);
433
- addFeatureSymbology(builder, featureMode, 29 /* Point */);
434
- this.addTranslucentShader(builderTrans, flags, gl);
435
- }
436
- else {
437
- this.addTranslucentShader(builderTrans, flags, gl);
438
- addFeatureSymbology(builder, featureMode, 0 /* None */);
444
+ for (const posType of positionTypes) {
445
+ for (let instanced = 0 /* No */; instanced <= 1 /* Yes */; instanced++) {
446
+ this.addHiliteShader(gl, instanced, 0 /* No */, posType, (inst, _class, pos) => createPointStringHiliter(inst, pos));
447
+ for (const featureMode of featureModes) {
448
+ flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */, posType);
449
+ const builder = createPointStringBuilder(instanced, posType);
450
+ addUnlitMonochrome(builder.frag);
451
+ // The translucent shaders do not need the element IDs.
452
+ const builderTrans = createPointStringBuilder(instanced, posType);
453
+ addUnlitMonochrome(builderTrans.frag);
454
+ if (2 /* Overrides */ === featureMode) {
455
+ addFeatureSymbology(builderTrans, featureMode, 29 /* Point */);
456
+ addFeatureSymbology(builder, featureMode, 29 /* Point */);
457
+ this.addTranslucentShader(builderTrans, flags, gl);
458
+ }
459
+ else {
460
+ this.addTranslucentShader(builderTrans, flags, gl);
461
+ addFeatureSymbology(builder, featureMode, 0 /* None */);
462
+ }
463
+ this.addFeatureId(builder, featureMode);
464
+ flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */, posType);
465
+ this.addShader(builder, flags, gl);
439
466
  }
440
- this.addFeatureId(builder, featureMode);
441
- flags.reset(featureMode, instanced, 0 /* No */, 0 /* No */);
442
- this.addShader(builder, flags, gl);
443
467
  }
444
468
  }
445
469
  this.finishConstruction();
446
470
  }
447
471
  get _debugDescription() { return "PointString"; }
448
472
  computeShaderIndex(flags) {
473
+ const idxOffset = "quantized" === flags.positionType ? 0 : PointStringTechnique._kUnquantized;
449
474
  if (flags.isHilite) {
450
475
  assert(flags.hasFeatures);
451
- return PointStringTechnique._kHilite + flags.isInstanced;
476
+ return PointStringTechnique._kHilite + flags.isInstanced + idxOffset;
452
477
  }
453
478
  let index = flags.isTranslucent ? PointStringTechnique._kTranslucent : PointStringTechnique._kOpaque;
454
479
  index += PointStringTechnique._kFeature * flags.featureMode;
455
480
  index += PointStringTechnique._kInstanced * flags.isInstanced;
456
- return index;
481
+ return index + idxOffset;
457
482
  }
458
483
  }
459
484
  PointStringTechnique._kOpaque = 0;
@@ -461,6 +486,7 @@ PointStringTechnique._kTranslucent = 1;
461
486
  PointStringTechnique._kInstanced = 2;
462
487
  PointStringTechnique._kFeature = 4;
463
488
  PointStringTechnique._kHilite = numFeatureVariants(PointStringTechnique._kFeature);
489
+ PointStringTechnique._kUnquantized = PointStringTechnique._kHilite + numHiliteVariants;
464
490
  class PointCloudTechnique extends VariedTechnique {
465
491
  constructor(gl) {
466
492
  super(PointCloudTechnique._kHilite + 2);
@@ -469,12 +495,12 @@ class PointCloudTechnique extends VariedTechnique {
469
495
  TechniqueFlags.fromDescription("Opaque-Hilite-Classified"),
470
496
  ];
471
497
  for (let iClassified = 0 /* No */; iClassified <= 1 /* Yes */; iClassified++) {
472
- this.addHiliteShader(gl, 0 /* No */, iClassified, () => createPointCloudHiliter(iClassified));
498
+ this.addHiliteShader(gl, 0 /* No */, iClassified, "quantized", (_inst, classified) => createPointCloudHiliter(classified));
473
499
  const flags = scratchTechniqueFlags;
474
500
  for (let thematic = 0 /* No */; thematic <= 1 /* Yes */; thematic++) {
475
501
  const pointCloudFeatureModes = [0 /* None */, 2 /* Overrides */];
476
502
  for (const featureMode of pointCloudFeatureModes) {
477
- flags.reset(featureMode, 0 /* No */, 0 /* No */, thematic);
503
+ flags.reset(featureMode, 0 /* No */, 0 /* No */, thematic, "quantized");
478
504
  flags.isClassified = iClassified;
479
505
  const builder = createPointCloudBuilder(flags.isClassified, featureMode, thematic);
480
506
  if (2 /* Overrides */ === featureMode) {
@@ -495,6 +521,7 @@ class PointCloudTechnique extends VariedTechnique {
495
521
  }
496
522
  get _debugDescription() { return "PointCloud"; }
497
523
  computeShaderIndex(flags) {
524
+ assert(flags.positionType === "quantized", "Unquantized point cloud positions not currently supported");
498
525
  if (flags.isHilite)
499
526
  return PointCloudTechnique._kHilite + flags.isClassified;
500
527
  else {
@@ -517,8 +544,8 @@ class RealityMeshTechnique extends VariedTechnique {
517
544
  TechniqueFlags.fromDescription("Opaque-Hilite-Overrides"),
518
545
  TechniqueFlags.fromDescription("Opaque-Hilite-Classified"),
519
546
  ];
520
- this.addHiliteShader(gl, 0 /* No */, 0 /* No */, createRealityMeshHiliter);
521
- this.addHiliteShader(gl, 0 /* No */, 1 /* Yes */, createClassifierRealityMeshHiliter);
547
+ this.addHiliteShader(gl, 0 /* No */, 0 /* No */, "quantized", createRealityMeshHiliter);
548
+ this.addHiliteShader(gl, 0 /* No */, 1 /* Yes */, "quantized", createClassifierRealityMeshHiliter);
522
549
  for (let iClassified = 0 /* No */; iClassified <= 1 /* Yes */; iClassified++) {
523
550
  for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {
524
551
  for (let shadowable = 0 /* No */; shadowable <= 1 /* Yes */; shadowable++) {
@@ -526,7 +553,7 @@ class RealityMeshTechnique extends VariedTechnique {
526
553
  for (let wiremesh = 0 /* No */; wiremesh <= 1 /* Yes */; wiremesh++) {
527
554
  const flags = scratchTechniqueFlags;
528
555
  for (const featureMode of featureModes) {
529
- flags.reset(featureMode, 0 /* No */, shadowable, thematic);
556
+ flags.reset(featureMode, 0 /* No */, shadowable, thematic, "quantized");
530
557
  flags.isClassified = iClassified;
531
558
  flags.isWiremesh = wiremesh;
532
559
  flags.isTranslucent = 1 === iTranslucent;
@@ -548,6 +575,7 @@ class RealityMeshTechnique extends VariedTechnique {
548
575
  }
549
576
  get _debugDescription() { return "RealityMesh"; }
550
577
  computeShaderIndex(flags) {
578
+ assert("quantized" === flags.positionType, "Unquantized reality mesh positions not currently supported.");
551
579
  if (flags.isHilite)
552
580
  return flags.isClassified ? 1 : 0;
553
581
  let ndx = 2;
@@ -704,7 +732,7 @@ export class Techniques {
704
732
  const tech = this._list[pTech.techniqueId];
705
733
  if (pTech.specificShader !== undefined) { // if this entry consists of a specific shader, just compile that
706
734
  const flags = scratchTechniqueFlags;
707
- flags.reset(pTech.specificShader.featureMode, pTech.specificShader.isInstanced, pTech.specificShader.isShadowable, 0 /* No */);
735
+ flags.reset(pTech.specificShader.featureMode, pTech.specificShader.isInstanced, pTech.specificShader.isShadowable, 0 /* No */, "quantized");
708
736
  flags.isEdgeTestNeeded = pTech.specificShader.isEdgeTestedNeeded;
709
737
  flags.isTranslucent = pTech.specificShader.isTranslucent;
710
738
  shader = tech.getShader(flags);