@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.
- package/lib/cjs/HitDetail.js.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.d.ts.map +1 -1
- package/lib/cjs/render/ParticleCollectionBuilder.js +16 -9
- package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +19 -17
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/EdgeParams.js +3 -1
- package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.d.ts.map +1 -1
- package/lib/cjs/render/primitives/PolylineParams.js +10 -5
- package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.d.ts +11 -8
- package/lib/cjs/render/primitives/VertexKey.d.ts.map +1 -1
- package/lib/cjs/render/primitives/VertexKey.js +24 -6
- package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.d.ts +15 -2
- package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
- package/lib/cjs/render/primitives/VertexTable.js +273 -108
- 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 +22 -10
- package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts +4 -6
- package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js +16 -13
- package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +12 -1
- package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +45 -28
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +107 -146
- package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.d.ts +6 -0
- package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/cjs/render/webgl/CachedGeometry.js +6 -0
- package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +12 -5
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/VertexLUT.d.ts +2 -1
- package/lib/cjs/render/webgl/VertexLUT.d.ts.map +1 -1
- package/lib/cjs/render/webgl/VertexLUT.js +4 -3
- package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js +1 -1
- package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Decode.d.ts +6 -0
- package/lib/cjs/render/webgl/glsl/Decode.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Decode.js +18 -1
- package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Edge.js +15 -6
- package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js +1 -1
- package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.d.ts +2 -2
- package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Polyline.js +24 -9
- package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +18 -19
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Thematic.js +1 -6
- package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Vertex.js +31 -14
- package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +8 -6
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/map/BingElevation.d.ts +2 -16
- package/lib/cjs/tile/map/BingElevation.d.ts.map +1 -1
- package/lib/cjs/tile/map/BingElevation.js +1 -63
- package/lib/cjs/tile/map/BingElevation.js.map +1 -1
- package/lib/esm/HitDetail.js.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.d.ts.map +1 -1
- package/lib/esm/render/ParticleCollectionBuilder.js +17 -10
- package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +20 -18
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/EdgeParams.js +3 -1
- package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.d.ts.map +1 -1
- package/lib/esm/render/primitives/PolylineParams.js +11 -6
- package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
- package/lib/esm/render/primitives/VertexKey.d.ts +11 -8
- package/lib/esm/render/primitives/VertexKey.d.ts.map +1 -1
- package/lib/esm/render/primitives/VertexKey.js +24 -6
- package/lib/esm/render/primitives/VertexKey.js.map +1 -1
- package/lib/esm/render/primitives/VertexTable.d.ts +15 -2
- package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
- package/lib/esm/render/primitives/VertexTable.js +274 -109
- 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 +23 -11
- package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts +4 -6
- package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilder.js +17 -14
- package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +12 -1
- package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +45 -28
- package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js +108 -144
- package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.d.ts +6 -0
- package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
- package/lib/esm/render/webgl/CachedGeometry.js +6 -0
- package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +12 -5
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/VertexLUT.d.ts +2 -1
- package/lib/esm/render/webgl/VertexLUT.d.ts.map +1 -1
- package/lib/esm/render/webgl/VertexLUT.js +4 -3
- package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Color.js +1 -1
- package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Decode.d.ts +6 -0
- package/lib/esm/render/webgl/glsl/Decode.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Decode.js +17 -0
- package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Edge.js +15 -6
- package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js +1 -1
- package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.d.ts +2 -2
- package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Polyline.js +24 -9
- package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +18 -19
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Thematic.js +1 -6
- package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Vertex.js +32 -15
- package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +9 -7
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/map/BingElevation.d.ts +2 -16
- package/lib/esm/tile/map/BingElevation.d.ts.map +1 -1
- package/lib/esm/tile/map/BingElevation.js +1 -63
- package/lib/esm/tile/map/BingElevation.js.map +1 -1
- 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 (
|
|
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
|
|
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() {
|
|
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":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6E;AAY7E,gBAAgB;AAChB,MAAa,SAAS;IAMpB,YAAmB,
|
|
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, 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
|
-
/**
|
|
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
|
-
/**
|
|
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":"AAIA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,
|
|
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(
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
(
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
this.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
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
|
-
|
|
273
|
-
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
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
|
-
|
|
281
|
-
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
/**
|
|
313
|
-
*
|
|
314
|
-
*
|
|
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
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
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
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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
|
-
|
|
339
|
-
class
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
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
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
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
|