@itwin/core-frontend 3.2.0-dev.28 → 3.2.0-dev.30
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.
- package/CHANGELOG.md +38 -1
- package/lib/cjs/ViewManager.d.ts.map +1 -1
- package/lib/cjs/ViewManager.js +1 -0
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.d.ts +1 -1
- package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +0 -1
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +2 -1
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +5 -4
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +7 -6
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts +4 -2
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +148 -120
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -3
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +17 -4
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Animation.js +2 -0
- package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js +8 -7
- package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -2
- package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +6 -10
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.d.ts +3 -3
- package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js +6 -6
- package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.d.ts +3 -3
- package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.js +6 -10
- package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts +2 -2
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +33 -16
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts +3 -1
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +139 -37
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +29 -6
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
- package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/ViewManager.d.ts.map +1 -1
- package/lib/esm/ViewManager.js +1 -0
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.d.ts +1 -1
- package/lib/esm/render/primitives/VertexTable.js.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +0 -1
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +2 -1
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +5 -4
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +7 -6
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/Technique.d.ts +4 -2
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +148 -120
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -3
- package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +17 -4
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Animation.js +2 -0
- package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Color.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Color.js +8 -7
- package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -2
- package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.js +7 -11
- package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.d.ts +3 -3
- package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js +6 -6
- package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.d.ts +3 -3
- package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.js +7 -11
- package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts +2 -2
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +33 -16
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.d.ts +3 -1
- package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js +138 -37
- package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +30 -7
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
- package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +11 -10
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- 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
|
-
|
|
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 (
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
for (let
|
|
222
|
-
for (let
|
|
223
|
-
for (let
|
|
224
|
-
for (let
|
|
225
|
-
for (
|
|
226
|
-
for (
|
|
227
|
-
|
|
228
|
-
if (
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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.
|
|
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 (
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
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(
|
|
388
|
+
super(EdgeTechnique._kUnquantized * 2);
|
|
372
389
|
this._type = type;
|
|
373
390
|
const flags = scratchTechniqueFlags;
|
|
374
|
-
for (
|
|
375
|
-
for (let
|
|
376
|
-
for (
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
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(
|
|
442
|
+
super(PointStringTechnique._kUnquantized * 2);
|
|
421
443
|
const flags = scratchTechniqueFlags;
|
|
422
|
-
for (
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
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(
|
|
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);
|