@cesium/engine 3.0.2 → 4.0.0
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/Build/ThirdParty/Workers/pako_deflate.min.js +605 -0
- package/Build/ThirdParty/Workers/pako_inflate.min.js +800 -0
- package/Build/ThirdParty/Workers/z-worker-pako.js +502 -0
- package/Build/Workers/chunk-27R2KRIK.js +634 -0
- package/Build/Workers/chunk-2C65EKYA.js +55 -0
- package/Build/Workers/chunk-2NLMZNJI.js +138 -0
- package/Build/Workers/chunk-4V6RCTVH.js +289 -0
- package/Build/Workers/chunk-4VWUFKYW.js +368 -0
- package/Build/Workers/chunk-527JG4D7.js +629 -0
- package/Build/Workers/chunk-5U4UHRZ2.js +8644 -0
- package/Build/Workers/chunk-7CZEWQWE.js +353 -0
- package/Build/Workers/chunk-7IMAWM6A.js +842 -0
- package/Build/Workers/{package.js → chunk-A6EA6KIE.js} +13 -2
- package/Build/Workers/chunk-AXGQUPXA.js +1075 -0
- package/Build/Workers/chunk-BT6YIL2N.js +39 -0
- package/Build/Workers/chunk-C6MRR5YL.js +476 -0
- package/Build/Workers/chunk-DJUTBX6A.js +1860 -0
- package/Build/Workers/chunk-EQ6ZAP37.js +218 -0
- package/Build/Workers/chunk-F7P2HCYZ.js +73 -0
- package/Build/Workers/chunk-FE2XG3SS.js +73 -0
- package/Build/Workers/chunk-FKHRSGKP.js +781 -0
- package/Build/Workers/chunk-FVDTKX3F.js +58 -0
- package/Build/Workers/chunk-FYHCAKU6.js +684 -0
- package/Build/Workers/chunk-G3MOT7BZ.js +157 -0
- package/Build/Workers/chunk-H52L6U76.js +421 -0
- package/Build/Workers/chunk-H6MBQ4W4.js +305 -0
- package/Build/Workers/chunk-HCZR75II.js +2716 -0
- package/Build/Workers/chunk-I5MQWHBR.js +102 -0
- package/Build/Workers/chunk-KAFF2QX3.js +258 -0
- package/Build/Workers/chunk-LGSGX2RH.js +757 -0
- package/Build/Workers/chunk-LQRFWCNX.js +124 -0
- package/Build/Workers/chunk-N5MMDSD2.js +44 -0
- package/Build/Workers/chunk-NRETMGYL.js +390 -0
- package/Build/Workers/chunk-P4M4QUNQ.js +196 -0
- package/Build/Workers/chunk-P7PWX5HR.js +430 -0
- package/Build/Workers/chunk-PGB3EFR7.js +171 -0
- package/Build/Workers/chunk-PW5CA4MJ.js +3273 -0
- package/Build/Workers/chunk-PWDYKCNC.js +501 -0
- package/Build/Workers/chunk-QIS3NB7U.js +1258 -0
- package/Build/Workers/chunk-QVJ6IRKV.js +77 -0
- package/Build/Workers/chunk-RDCDRNJ7.js +117 -0
- package/Build/Workers/chunk-RDM3BKNC.js +1009 -0
- package/Build/Workers/chunk-RRUPTJ6P.js +452 -0
- package/Build/Workers/chunk-SGRWJKNO.js +400 -0
- package/Build/Workers/chunk-TF5D2H7B.js +138 -0
- package/Build/Workers/chunk-TVYIHH4V.js +513 -0
- package/Build/Workers/chunk-U5LKG6LX.js +101 -0
- package/Build/Workers/chunk-UGZGTV5K.js +302 -0
- package/Build/Workers/chunk-UN7AK64D.js +163 -0
- package/Build/Workers/chunk-V2LKNJGT.js +59 -0
- package/Build/Workers/chunk-VSCXSFHE.js +1477 -0
- package/Build/Workers/chunk-XJCTFTBM.js +2041 -0
- package/Build/Workers/chunk-XZVQMPWG.js +100 -0
- package/Build/Workers/chunk-YLAFWVOW.js +834 -0
- package/Build/Workers/chunk-YLS3FX3U.js +236 -0
- package/Build/Workers/chunk-YMJPANZZ.js +693 -0
- package/Build/Workers/combineGeometry.js +65 -15
- package/Build/Workers/createBoxGeometry.js +55 -10
- package/Build/Workers/createBoxOutlineGeometry.js +231 -310
- package/Build/Workers/createCircleGeometry.js +185 -202
- package/Build/Workers/createCircleOutlineGeometry.js +141 -155
- package/Build/Workers/createCoplanarPolygonGeometry.js +477 -557
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +218 -230
- package/Build/Workers/createCorridorGeometry.js +1162 -1307
- package/Build/Workers/createCorridorOutlineGeometry.js +533 -569
- package/Build/Workers/createCylinderGeometry.js +57 -10
- package/Build/Workers/createCylinderOutlineGeometry.js +224 -258
- package/Build/Workers/createEllipseGeometry.js +68 -12
- package/Build/Workers/createEllipseOutlineGeometry.js +61 -12
- package/Build/Workers/createEllipsoidGeometry.js +56 -10
- package/Build/Workers/createEllipsoidOutlineGeometry.js +58 -13
- package/Build/Workers/createFrustumGeometry.js +55 -10
- package/Build/Workers/createFrustumOutlineGeometry.js +226 -243
- package/Build/Workers/createGeometry.js +143 -48
- package/Build/Workers/createGroundPolylineGeometry.js +1484 -2012
- package/Build/Workers/createPlaneGeometry.js +216 -243
- package/Build/Workers/createPlaneOutlineGeometry.js +121 -113
- package/Build/Workers/createPolygonGeometry.js +1041 -1327
- package/Build/Workers/createPolygonOutlineGeometry.js +516 -657
- package/Build/Workers/createPolylineGeometry.js +471 -547
- package/Build/Workers/createPolylineVolumeGeometry.js +352 -384
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +271 -295
- package/Build/Workers/createRectangleGeometry.js +1128 -1331
- package/Build/Workers/createRectangleOutlineGeometry.js +445 -500
- package/Build/Workers/createSimplePolylineGeometry.js +381 -440
- package/Build/Workers/createSphereGeometry.js +112 -118
- package/Build/Workers/createSphereOutlineGeometry.js +112 -121
- package/Build/Workers/createTaskProcessorWorker.js +32 -127
- package/Build/Workers/createVectorTileClampedPolylines.js +462 -505
- package/Build/Workers/createVectorTileGeometries.js +377 -436
- package/Build/Workers/createVectorTilePoints.js +110 -77
- package/Build/Workers/createVectorTilePolygons.js +369 -391
- package/Build/Workers/createVectorTilePolylines.js +252 -244
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +543 -615
- package/Build/Workers/createVerticesFromHeightmap.js +2244 -2677
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +682 -904
- package/Build/Workers/createWallGeometry.js +459 -593
- package/Build/Workers/createWallOutlineGeometry.js +324 -419
- package/Build/Workers/decodeDraco.js +327 -347
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +2530 -3567
- package/Build/Workers/decodeI3S.js +765 -970
- package/Build/Workers/transcodeKTX2.js +3351 -1473
- package/Build/Workers/transferTypedArrayTest.js +3 -4
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +748 -953
- package/LICENSE.md +0 -12
- package/Source/Core/CesiumTerrainProvider.js +1 -2
- package/Source/Core/FeatureDetection.js +9 -0
- package/Source/Core/GoogleMaps.js +1 -1
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/KTX2Transcoder.js +7 -3
- package/Source/Core/TaskProcessor.js +150 -146
- package/Source/Core/Transforms.js +2 -2
- package/Source/Core/buildModuleUrl.js +6 -5
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/DracoLoader.js +26 -3
- package/Source/Scene/I3SDataProvider.js +0 -27
- package/Source/Scene/I3SDecoder.js +127 -0
- package/Source/Scene/I3SNode.js +32 -110
- package/Source/Scene/Implicit3DTileContent.js +13 -0
- package/Source/Scene/ImplicitTileset.js +5 -0
- package/Source/Scene/Model/I3dmLoader.js +5 -1
- package/Source/Scene/Model/Model.js +4 -1
- package/Source/Scene/OpenStreetMapImageryProvider.js +4 -1
- package/Source/Scene/SingleTileImageryProvider.js +4 -2
- package/Source/ThirdParty/Workers/basis_transcoder.js +1 -1
- package/Source/{WorkersES6 → Workers}/createGeometry.js +11 -12
- package/Source/{WorkersES6 → Workers}/createTaskProcessorWorker.js +43 -59
- package/Source/{WorkersES6 → Workers}/decodeDraco.js +19 -25
- package/Source/{WorkersES6 → Workers}/decodeI3S.js +18 -32
- package/Source/{WorkersES6 → Workers}/transcodeKTX2.js +19 -26
- package/Source/Workers/transferTypedArrayTest.js +0 -6
- package/index.d.ts +16 -7
- package/index.js +252 -251
- package/package.json +2 -1
- package/Build/Workers/ArcType-2d9abbbc.js +0 -37
- package/Build/Workers/AttributeCompression-f9f6c717.js +0 -716
- package/Build/Workers/AxisAlignedBoundingBox-a03420b1.js +0 -258
- package/Build/Workers/BoundingRectangle-32fa8a4a.js +0 -369
- package/Build/Workers/BoxGeometry-cd550612.js +0 -884
- package/Build/Workers/Check-6ede7e26.js +0 -290
- package/Build/Workers/Color-571a6085.js +0 -2262
- package/Build/Workers/ComponentDatatype-cf1fa08e.js +0 -341
- package/Build/Workers/CoplanarPolygonGeometryLibrary-488b1a9f.js +0 -132
- package/Build/Workers/CorridorGeometryLibrary-fc4ff147.js +0 -498
- package/Build/Workers/CylinderGeometry-bc26926d.js +0 -467
- package/Build/Workers/CylinderGeometryLibrary-7bf291b4.js +0 -63
- package/Build/Workers/EllipseGeometry-89533a10.js +0 -1304
- package/Build/Workers/EllipseGeometryLibrary-b0d7df17.js +0 -366
- package/Build/Workers/EllipseOutlineGeometry-63ff7a87.js +0 -443
- package/Build/Workers/EllipsoidGeodesic-5b3623dc.js +0 -520
- package/Build/Workers/EllipsoidGeometry-07e99d2d.js +0 -637
- package/Build/Workers/EllipsoidOutlineGeometry-ba5c7ee2.js +0 -454
- package/Build/Workers/EllipsoidRhumbLine-ef872433.js +0 -741
- package/Build/Workers/EllipsoidTangentPlane-65d41b3e.js +0 -373
- package/Build/Workers/EncodedCartesian3-57415c8a.js +0 -171
- package/Build/Workers/FrustumGeometry-4a7589ed.js +0 -2540
- package/Build/Workers/GeometryAttribute-a5b6275b.js +0 -619
- package/Build/Workers/GeometryAttributes-ad136444.js +0 -91
- package/Build/Workers/GeometryInstance-34d9e21e.js +0 -121
- package/Build/Workers/GeometryOffsetAttribute-9ad0019c.js +0 -16
- package/Build/Workers/GeometryPipeline-fa9e6ffc.js +0 -3690
- package/Build/Workers/IndexDatatype-2643aa47.js +0 -200
- package/Build/Workers/IntersectionTests-feace3da.js +0 -1836
- package/Build/Workers/Math-0a2ac845.js +0 -1340
- package/Build/Workers/Matrix2-e1298525.js +0 -7086
- package/Build/Workers/Matrix3-41c58dde.js +0 -4283
- package/Build/Workers/OrientedBoundingBox-6b94d955.js +0 -1259
- package/Build/Workers/Plane-4c3d403b.js +0 -309
- package/Build/Workers/PolygonGeometryLibrary-4ffc457d.js +0 -1074
- package/Build/Workers/PolygonPipeline-d5e66350.js +0 -1344
- package/Build/Workers/PolylinePipeline-83410f0c.js +0 -573
- package/Build/Workers/PolylineVolumeGeometryLibrary-290e7aec.js +0 -781
- package/Build/Workers/PrimitivePipeline-6081d138.js +0 -966
- package/Build/Workers/RectangleGeometryLibrary-986710d8.js +0 -280
- package/Build/Workers/RuntimeError-ef395448.js +0 -68
- package/Build/Workers/TerrainEncoding-528e1d68.js +0 -1227
- package/Build/Workers/Transforms-b527bb09.js +0 -14714
- package/Build/Workers/VertexFormat-030f11ff.js +0 -312
- package/Build/Workers/WallGeometryLibrary-faf583f8.js +0 -211
- package/Build/Workers/WebGLConstants-0b1ce7ba.js +0 -620
- package/Build/Workers/WebMercatorProjection-13ed1a6e.js +0 -151
- package/Build/Workers/arrayRemoveDuplicates-d2061e85.js +0 -129
- package/Build/Workers/cesiumWorkerBootstrapper.js +0 -1363
- package/Build/Workers/combine-d9581036.js +0 -82
- package/Build/Workers/defaultValue-fe22d8c0.js +0 -51
- package/Source/ThirdParty/Workers/draco_decoder_nodejs.js +0 -117
- package/Source/Workers/cesiumWorkerBootstrapper.js +0 -2290
- package/Source/Workers/package.json +0 -1
- /package/Source/{WorkersES6 → Workers}/combineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createBoxGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createBoxOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCircleGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCircleOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCorridorGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCorridorOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCylinderGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createCylinderOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createEllipseGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createEllipseOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createEllipsoidGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createEllipsoidOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createFrustumGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createFrustumOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createGroundPolylineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPlaneGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPlaneOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPolygonGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPolygonOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPolylineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPolylineVolumeGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createPolylineVolumeOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createRectangleGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createRectangleOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createSimplePolylineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createSphereGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createSphereOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVectorTileClampedPolylines.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVectorTileGeometries.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVectorTilePoints.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVectorTilePolygons.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVectorTilePolylines.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVerticesFromHeightmap.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createVerticesFromQuantizedTerrainMesh.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createWallGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/createWallOutlineGeometry.js +0 -0
- /package/Source/{WorkersES6 → Workers}/decodeGoogleEarthEnterprisePacket.js +0 -0
- /package/Source/{WorkersES6 → Workers}/upsampleQuantizedTerrainMesh.js +0 -0
|
@@ -1,966 +0,0 @@
|
|
|
1
|
-
define(['exports', './Transforms-b527bb09', './ComponentDatatype-cf1fa08e', './defaultValue-fe22d8c0', './Check-6ede7e26', './Matrix3-41c58dde', './GeometryAttribute-a5b6275b', './GeometryAttributes-ad136444', './GeometryPipeline-fa9e6ffc', './IndexDatatype-2643aa47', './Matrix2-e1298525', './WebMercatorProjection-13ed1a6e'], (function (exports, Transforms, ComponentDatatype, defaultValue, Check, Matrix3, GeometryAttribute, GeometryAttributes, GeometryPipeline, IndexDatatype, Matrix2, WebMercatorProjection) { 'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Value and type information for per-instance geometry attribute that determines the geometry instance offset
|
|
5
|
-
*
|
|
6
|
-
* @alias OffsetGeometryInstanceAttribute
|
|
7
|
-
* @constructor
|
|
8
|
-
*
|
|
9
|
-
* @param {number} [x=0] The x translation
|
|
10
|
-
* @param {number} [y=0] The y translation
|
|
11
|
-
* @param {number} [z=0] The z translation
|
|
12
|
-
*
|
|
13
|
-
* @private
|
|
14
|
-
*
|
|
15
|
-
* @see GeometryInstance
|
|
16
|
-
* @see GeometryInstanceAttribute
|
|
17
|
-
*/
|
|
18
|
-
function OffsetGeometryInstanceAttribute(x, y, z) {
|
|
19
|
-
x = defaultValue.defaultValue(x, 0);
|
|
20
|
-
y = defaultValue.defaultValue(y, 0);
|
|
21
|
-
z = defaultValue.defaultValue(z, 0);
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The values for the attributes stored in a typed array.
|
|
25
|
-
*
|
|
26
|
-
* @type Float32Array
|
|
27
|
-
*/
|
|
28
|
-
this.value = new Float32Array([x, y, z]);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
Object.defineProperties(OffsetGeometryInstanceAttribute.prototype, {
|
|
32
|
-
/**
|
|
33
|
-
* The datatype of each component in the attribute, e.g., individual elements in
|
|
34
|
-
* {@link OffsetGeometryInstanceAttribute#value}.
|
|
35
|
-
*
|
|
36
|
-
* @memberof OffsetGeometryInstanceAttribute.prototype
|
|
37
|
-
*
|
|
38
|
-
* @type {ComponentDatatype}
|
|
39
|
-
* @readonly
|
|
40
|
-
*
|
|
41
|
-
* @default {@link ComponentDatatype.FLOAT}
|
|
42
|
-
*/
|
|
43
|
-
componentDatatype: {
|
|
44
|
-
get: function () {
|
|
45
|
-
return ComponentDatatype.ComponentDatatype.FLOAT;
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The number of components in the attributes, i.e., {@link OffsetGeometryInstanceAttribute#value}.
|
|
51
|
-
*
|
|
52
|
-
* @memberof OffsetGeometryInstanceAttribute.prototype
|
|
53
|
-
*
|
|
54
|
-
* @type {number}
|
|
55
|
-
* @readonly
|
|
56
|
-
*
|
|
57
|
-
* @default 3
|
|
58
|
-
*/
|
|
59
|
-
componentsPerAttribute: {
|
|
60
|
-
get: function () {
|
|
61
|
-
return 3;
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* When <code>true</code> and <code>componentDatatype</code> is an integer format,
|
|
67
|
-
* indicate that the components should be mapped to the range [0, 1] (unsigned)
|
|
68
|
-
* or [-1, 1] (signed) when they are accessed as floating-point for rendering.
|
|
69
|
-
*
|
|
70
|
-
* @memberof OffsetGeometryInstanceAttribute.prototype
|
|
71
|
-
*
|
|
72
|
-
* @type {boolean}
|
|
73
|
-
* @readonly
|
|
74
|
-
*
|
|
75
|
-
* @default false
|
|
76
|
-
*/
|
|
77
|
-
normalize: {
|
|
78
|
-
get: function () {
|
|
79
|
-
return false;
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Creates a new {@link OffsetGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.
|
|
86
|
-
*
|
|
87
|
-
* @param {Cartesian3} offset The cartesian offset
|
|
88
|
-
* @returns {OffsetGeometryInstanceAttribute} The new {@link OffsetGeometryInstanceAttribute} instance.
|
|
89
|
-
*/
|
|
90
|
-
OffsetGeometryInstanceAttribute.fromCartesian3 = function (offset) {
|
|
91
|
-
//>>includeStart('debug', pragmas.debug);
|
|
92
|
-
Check.Check.defined("offset", offset);
|
|
93
|
-
//>>includeEnd('debug');
|
|
94
|
-
|
|
95
|
-
return new OffsetGeometryInstanceAttribute(offset.x, offset.y, offset.z);
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.
|
|
100
|
-
*
|
|
101
|
-
* @param {Cartesian3} offset The cartesian offset
|
|
102
|
-
* @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.
|
|
103
|
-
* @returns {Float32Array} The modified result parameter or a new instance if result was undefined.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* const attributes = primitive.getGeometryInstanceAttributes('an id');
|
|
107
|
-
* attributes.modelMatrix = Cesium.OffsetGeometryInstanceAttribute.toValue(modelMatrix, attributes.modelMatrix);
|
|
108
|
-
*/
|
|
109
|
-
OffsetGeometryInstanceAttribute.toValue = function (offset, result) {
|
|
110
|
-
//>>includeStart('debug', pragmas.debug);
|
|
111
|
-
Check.Check.defined("offset", offset);
|
|
112
|
-
//>>includeEnd('debug');
|
|
113
|
-
|
|
114
|
-
if (!defaultValue.defined(result)) {
|
|
115
|
-
result = new Float32Array([offset.x, offset.y, offset.z]);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
result[0] = offset.x;
|
|
119
|
-
result[1] = offset.y;
|
|
120
|
-
result[2] = offset.z;
|
|
121
|
-
return result;
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
function transformToWorldCoordinates(
|
|
125
|
-
instances,
|
|
126
|
-
primitiveModelMatrix,
|
|
127
|
-
scene3DOnly
|
|
128
|
-
) {
|
|
129
|
-
let toWorld = !scene3DOnly;
|
|
130
|
-
const length = instances.length;
|
|
131
|
-
let i;
|
|
132
|
-
|
|
133
|
-
if (!toWorld && length > 1) {
|
|
134
|
-
const modelMatrix = instances[0].modelMatrix;
|
|
135
|
-
|
|
136
|
-
for (i = 1; i < length; ++i) {
|
|
137
|
-
if (!Matrix2.Matrix4.equals(modelMatrix, instances[i].modelMatrix)) {
|
|
138
|
-
toWorld = true;
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (toWorld) {
|
|
145
|
-
for (i = 0; i < length; ++i) {
|
|
146
|
-
if (defaultValue.defined(instances[i].geometry)) {
|
|
147
|
-
GeometryPipeline.GeometryPipeline.transformToWorldCoordinates(instances[i]);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
// Leave geometry in local coordinate system; auto update model-matrix.
|
|
152
|
-
Matrix2.Matrix4.multiplyTransformation(
|
|
153
|
-
primitiveModelMatrix,
|
|
154
|
-
instances[0].modelMatrix,
|
|
155
|
-
primitiveModelMatrix
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
function addGeometryBatchId(geometry, batchId) {
|
|
161
|
-
const attributes = geometry.attributes;
|
|
162
|
-
const positionAttr = attributes.position;
|
|
163
|
-
const numberOfComponents =
|
|
164
|
-
positionAttr.values.length / positionAttr.componentsPerAttribute;
|
|
165
|
-
|
|
166
|
-
attributes.batchId = new GeometryAttribute.GeometryAttribute({
|
|
167
|
-
componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT,
|
|
168
|
-
componentsPerAttribute: 1,
|
|
169
|
-
values: new Float32Array(numberOfComponents),
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
const values = attributes.batchId.values;
|
|
173
|
-
for (let j = 0; j < numberOfComponents; ++j) {
|
|
174
|
-
values[j] = batchId;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function addBatchIds(instances) {
|
|
179
|
-
const length = instances.length;
|
|
180
|
-
|
|
181
|
-
for (let i = 0; i < length; ++i) {
|
|
182
|
-
const instance = instances[i];
|
|
183
|
-
if (defaultValue.defined(instance.geometry)) {
|
|
184
|
-
addGeometryBatchId(instance.geometry, i);
|
|
185
|
-
} else if (
|
|
186
|
-
defaultValue.defined(instance.westHemisphereGeometry) &&
|
|
187
|
-
defaultValue.defined(instance.eastHemisphereGeometry)
|
|
188
|
-
) {
|
|
189
|
-
addGeometryBatchId(instance.westHemisphereGeometry, i);
|
|
190
|
-
addGeometryBatchId(instance.eastHemisphereGeometry, i);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
function geometryPipeline(parameters) {
|
|
196
|
-
const instances = parameters.instances;
|
|
197
|
-
const projection = parameters.projection;
|
|
198
|
-
const uintIndexSupport = parameters.elementIndexUintSupported;
|
|
199
|
-
const scene3DOnly = parameters.scene3DOnly;
|
|
200
|
-
const vertexCacheOptimize = parameters.vertexCacheOptimize;
|
|
201
|
-
const compressVertices = parameters.compressVertices;
|
|
202
|
-
const modelMatrix = parameters.modelMatrix;
|
|
203
|
-
|
|
204
|
-
let i;
|
|
205
|
-
let geometry;
|
|
206
|
-
let primitiveType;
|
|
207
|
-
let length = instances.length;
|
|
208
|
-
|
|
209
|
-
for (i = 0; i < length; ++i) {
|
|
210
|
-
if (defaultValue.defined(instances[i].geometry)) {
|
|
211
|
-
primitiveType = instances[i].geometry.primitiveType;
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
//>>includeStart('debug', pragmas.debug);
|
|
217
|
-
for (i = 1; i < length; ++i) {
|
|
218
|
-
if (
|
|
219
|
-
defaultValue.defined(instances[i].geometry) &&
|
|
220
|
-
instances[i].geometry.primitiveType !== primitiveType
|
|
221
|
-
) {
|
|
222
|
-
throw new Check.DeveloperError(
|
|
223
|
-
"All instance geometries must have the same primitiveType."
|
|
224
|
-
);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
//>>includeEnd('debug');
|
|
228
|
-
|
|
229
|
-
// Unify to world coordinates before combining.
|
|
230
|
-
transformToWorldCoordinates(instances, modelMatrix, scene3DOnly);
|
|
231
|
-
|
|
232
|
-
// Clip to IDL
|
|
233
|
-
if (!scene3DOnly) {
|
|
234
|
-
for (i = 0; i < length; ++i) {
|
|
235
|
-
if (defaultValue.defined(instances[i].geometry)) {
|
|
236
|
-
GeometryPipeline.GeometryPipeline.splitLongitude(instances[i]);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
addBatchIds(instances);
|
|
242
|
-
|
|
243
|
-
// Optimize for vertex shader caches
|
|
244
|
-
if (vertexCacheOptimize) {
|
|
245
|
-
for (i = 0; i < length; ++i) {
|
|
246
|
-
const instance = instances[i];
|
|
247
|
-
if (defaultValue.defined(instance.geometry)) {
|
|
248
|
-
GeometryPipeline.GeometryPipeline.reorderForPostVertexCache(instance.geometry);
|
|
249
|
-
GeometryPipeline.GeometryPipeline.reorderForPreVertexCache(instance.geometry);
|
|
250
|
-
} else if (
|
|
251
|
-
defaultValue.defined(instance.westHemisphereGeometry) &&
|
|
252
|
-
defaultValue.defined(instance.eastHemisphereGeometry)
|
|
253
|
-
) {
|
|
254
|
-
GeometryPipeline.GeometryPipeline.reorderForPostVertexCache(
|
|
255
|
-
instance.westHemisphereGeometry
|
|
256
|
-
);
|
|
257
|
-
GeometryPipeline.GeometryPipeline.reorderForPreVertexCache(
|
|
258
|
-
instance.westHemisphereGeometry
|
|
259
|
-
);
|
|
260
|
-
|
|
261
|
-
GeometryPipeline.GeometryPipeline.reorderForPostVertexCache(
|
|
262
|
-
instance.eastHemisphereGeometry
|
|
263
|
-
);
|
|
264
|
-
GeometryPipeline.GeometryPipeline.reorderForPreVertexCache(
|
|
265
|
-
instance.eastHemisphereGeometry
|
|
266
|
-
);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Combine into single geometry for better rendering performance.
|
|
272
|
-
let geometries = GeometryPipeline.GeometryPipeline.combineInstances(instances);
|
|
273
|
-
|
|
274
|
-
length = geometries.length;
|
|
275
|
-
for (i = 0; i < length; ++i) {
|
|
276
|
-
geometry = geometries[i];
|
|
277
|
-
|
|
278
|
-
// Split positions for GPU RTE
|
|
279
|
-
const attributes = geometry.attributes;
|
|
280
|
-
if (!scene3DOnly) {
|
|
281
|
-
for (const name in attributes) {
|
|
282
|
-
if (
|
|
283
|
-
attributes.hasOwnProperty(name) &&
|
|
284
|
-
attributes[name].componentDatatype === ComponentDatatype.ComponentDatatype.DOUBLE
|
|
285
|
-
) {
|
|
286
|
-
const name3D = `${name}3D`;
|
|
287
|
-
const name2D = `${name}2D`;
|
|
288
|
-
|
|
289
|
-
// Compute 2D positions
|
|
290
|
-
GeometryPipeline.GeometryPipeline.projectTo2D(
|
|
291
|
-
geometry,
|
|
292
|
-
name,
|
|
293
|
-
name3D,
|
|
294
|
-
name2D,
|
|
295
|
-
projection
|
|
296
|
-
);
|
|
297
|
-
if (defaultValue.defined(geometry.boundingSphere) && name === "position") {
|
|
298
|
-
geometry.boundingSphereCV = Transforms.BoundingSphere.fromVertices(
|
|
299
|
-
geometry.attributes.position2D.values
|
|
300
|
-
);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
GeometryPipeline.GeometryPipeline.encodeAttribute(
|
|
304
|
-
geometry,
|
|
305
|
-
name3D,
|
|
306
|
-
`${name3D}High`,
|
|
307
|
-
`${name3D}Low`
|
|
308
|
-
);
|
|
309
|
-
GeometryPipeline.GeometryPipeline.encodeAttribute(
|
|
310
|
-
geometry,
|
|
311
|
-
name2D,
|
|
312
|
-
`${name2D}High`,
|
|
313
|
-
`${name2D}Low`
|
|
314
|
-
);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
} else {
|
|
318
|
-
for (const name in attributes) {
|
|
319
|
-
if (
|
|
320
|
-
attributes.hasOwnProperty(name) &&
|
|
321
|
-
attributes[name].componentDatatype === ComponentDatatype.ComponentDatatype.DOUBLE
|
|
322
|
-
) {
|
|
323
|
-
GeometryPipeline.GeometryPipeline.encodeAttribute(
|
|
324
|
-
geometry,
|
|
325
|
-
name,
|
|
326
|
-
`${name}3DHigh`,
|
|
327
|
-
`${name}3DLow`
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// oct encode and pack normals, compress texture coordinates
|
|
334
|
-
if (compressVertices) {
|
|
335
|
-
GeometryPipeline.GeometryPipeline.compressVertices(geometry);
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
if (!uintIndexSupport) {
|
|
340
|
-
// Break into multiple geometries to fit within unsigned short indices if needed
|
|
341
|
-
let splitGeometries = [];
|
|
342
|
-
length = geometries.length;
|
|
343
|
-
for (i = 0; i < length; ++i) {
|
|
344
|
-
geometry = geometries[i];
|
|
345
|
-
splitGeometries = splitGeometries.concat(
|
|
346
|
-
GeometryPipeline.GeometryPipeline.fitToUnsignedShortIndices(geometry)
|
|
347
|
-
);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
geometries = splitGeometries;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
return geometries;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
function createPickOffsets(instances, geometryName, geometries, pickOffsets) {
|
|
357
|
-
let offset;
|
|
358
|
-
let indexCount;
|
|
359
|
-
let geometryIndex;
|
|
360
|
-
|
|
361
|
-
const offsetIndex = pickOffsets.length - 1;
|
|
362
|
-
if (offsetIndex >= 0) {
|
|
363
|
-
const pickOffset = pickOffsets[offsetIndex];
|
|
364
|
-
offset = pickOffset.offset + pickOffset.count;
|
|
365
|
-
geometryIndex = pickOffset.index;
|
|
366
|
-
indexCount = geometries[geometryIndex].indices.length;
|
|
367
|
-
} else {
|
|
368
|
-
offset = 0;
|
|
369
|
-
geometryIndex = 0;
|
|
370
|
-
indexCount = geometries[geometryIndex].indices.length;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
const length = instances.length;
|
|
374
|
-
for (let i = 0; i < length; ++i) {
|
|
375
|
-
const instance = instances[i];
|
|
376
|
-
const geometry = instance[geometryName];
|
|
377
|
-
if (!defaultValue.defined(geometry)) {
|
|
378
|
-
continue;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
const count = geometry.indices.length;
|
|
382
|
-
|
|
383
|
-
if (offset + count > indexCount) {
|
|
384
|
-
offset = 0;
|
|
385
|
-
indexCount = geometries[++geometryIndex].indices.length;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
pickOffsets.push({
|
|
389
|
-
index: geometryIndex,
|
|
390
|
-
offset: offset,
|
|
391
|
-
count: count,
|
|
392
|
-
});
|
|
393
|
-
offset += count;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
function createInstancePickOffsets(instances, geometries) {
|
|
398
|
-
const pickOffsets = [];
|
|
399
|
-
createPickOffsets(instances, "geometry", geometries, pickOffsets);
|
|
400
|
-
createPickOffsets(
|
|
401
|
-
instances,
|
|
402
|
-
"westHemisphereGeometry",
|
|
403
|
-
geometries,
|
|
404
|
-
pickOffsets
|
|
405
|
-
);
|
|
406
|
-
createPickOffsets(
|
|
407
|
-
instances,
|
|
408
|
-
"eastHemisphereGeometry",
|
|
409
|
-
geometries,
|
|
410
|
-
pickOffsets
|
|
411
|
-
);
|
|
412
|
-
return pickOffsets;
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/**
|
|
416
|
-
* @private
|
|
417
|
-
*/
|
|
418
|
-
const PrimitivePipeline = {};
|
|
419
|
-
|
|
420
|
-
/**
|
|
421
|
-
* @private
|
|
422
|
-
*/
|
|
423
|
-
PrimitivePipeline.combineGeometry = function (parameters) {
|
|
424
|
-
let geometries;
|
|
425
|
-
let attributeLocations;
|
|
426
|
-
const instances = parameters.instances;
|
|
427
|
-
const length = instances.length;
|
|
428
|
-
let pickOffsets;
|
|
429
|
-
|
|
430
|
-
let offsetInstanceExtend;
|
|
431
|
-
let hasOffset = false;
|
|
432
|
-
if (length > 0) {
|
|
433
|
-
geometries = geometryPipeline(parameters);
|
|
434
|
-
if (geometries.length > 0) {
|
|
435
|
-
attributeLocations = GeometryPipeline.GeometryPipeline.createAttributeLocations(
|
|
436
|
-
geometries[0]
|
|
437
|
-
);
|
|
438
|
-
if (parameters.createPickOffsets) {
|
|
439
|
-
pickOffsets = createInstancePickOffsets(instances, geometries);
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
if (
|
|
443
|
-
defaultValue.defined(instances[0].attributes) &&
|
|
444
|
-
defaultValue.defined(instances[0].attributes.offset)
|
|
445
|
-
) {
|
|
446
|
-
offsetInstanceExtend = new Array(length);
|
|
447
|
-
hasOffset = true;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
const boundingSpheres = new Array(length);
|
|
452
|
-
const boundingSpheresCV = new Array(length);
|
|
453
|
-
for (let i = 0; i < length; ++i) {
|
|
454
|
-
const instance = instances[i];
|
|
455
|
-
const geometry = instance.geometry;
|
|
456
|
-
if (defaultValue.defined(geometry)) {
|
|
457
|
-
boundingSpheres[i] = geometry.boundingSphere;
|
|
458
|
-
boundingSpheresCV[i] = geometry.boundingSphereCV;
|
|
459
|
-
if (hasOffset) {
|
|
460
|
-
offsetInstanceExtend[i] = instance.geometry.offsetAttribute;
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
const eastHemisphereGeometry = instance.eastHemisphereGeometry;
|
|
465
|
-
const westHemisphereGeometry = instance.westHemisphereGeometry;
|
|
466
|
-
if (defaultValue.defined(eastHemisphereGeometry) && defaultValue.defined(westHemisphereGeometry)) {
|
|
467
|
-
if (
|
|
468
|
-
defaultValue.defined(eastHemisphereGeometry.boundingSphere) &&
|
|
469
|
-
defaultValue.defined(westHemisphereGeometry.boundingSphere)
|
|
470
|
-
) {
|
|
471
|
-
boundingSpheres[i] = Transforms.BoundingSphere.union(
|
|
472
|
-
eastHemisphereGeometry.boundingSphere,
|
|
473
|
-
westHemisphereGeometry.boundingSphere
|
|
474
|
-
);
|
|
475
|
-
}
|
|
476
|
-
if (
|
|
477
|
-
defaultValue.defined(eastHemisphereGeometry.boundingSphereCV) &&
|
|
478
|
-
defaultValue.defined(westHemisphereGeometry.boundingSphereCV)
|
|
479
|
-
) {
|
|
480
|
-
boundingSpheresCV[i] = Transforms.BoundingSphere.union(
|
|
481
|
-
eastHemisphereGeometry.boundingSphereCV,
|
|
482
|
-
westHemisphereGeometry.boundingSphereCV
|
|
483
|
-
);
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
return {
|
|
489
|
-
geometries: geometries,
|
|
490
|
-
modelMatrix: parameters.modelMatrix,
|
|
491
|
-
attributeLocations: attributeLocations,
|
|
492
|
-
pickOffsets: pickOffsets,
|
|
493
|
-
offsetInstanceExtend: offsetInstanceExtend,
|
|
494
|
-
boundingSpheres: boundingSpheres,
|
|
495
|
-
boundingSpheresCV: boundingSpheresCV,
|
|
496
|
-
};
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
function transferGeometry(geometry, transferableObjects) {
|
|
500
|
-
const attributes = geometry.attributes;
|
|
501
|
-
for (const name in attributes) {
|
|
502
|
-
if (attributes.hasOwnProperty(name)) {
|
|
503
|
-
const attribute = attributes[name];
|
|
504
|
-
|
|
505
|
-
if (defaultValue.defined(attribute) && defaultValue.defined(attribute.values)) {
|
|
506
|
-
transferableObjects.push(attribute.values.buffer);
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
if (defaultValue.defined(geometry.indices)) {
|
|
512
|
-
transferableObjects.push(geometry.indices.buffer);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
function transferGeometries(geometries, transferableObjects) {
|
|
517
|
-
const length = geometries.length;
|
|
518
|
-
for (let i = 0; i < length; ++i) {
|
|
519
|
-
transferGeometry(geometries[i], transferableObjects);
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
// This function was created by simplifying packCreateGeometryResults into a count-only operation.
|
|
524
|
-
function countCreateGeometryResults(items) {
|
|
525
|
-
let count = 1;
|
|
526
|
-
const length = items.length;
|
|
527
|
-
for (let i = 0; i < length; i++) {
|
|
528
|
-
const geometry = items[i];
|
|
529
|
-
++count;
|
|
530
|
-
|
|
531
|
-
if (!defaultValue.defined(geometry)) {
|
|
532
|
-
continue;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
const attributes = geometry.attributes;
|
|
536
|
-
|
|
537
|
-
count +=
|
|
538
|
-
7 +
|
|
539
|
-
2 * Transforms.BoundingSphere.packedLength +
|
|
540
|
-
(defaultValue.defined(geometry.indices) ? geometry.indices.length : 0);
|
|
541
|
-
|
|
542
|
-
for (const property in attributes) {
|
|
543
|
-
if (
|
|
544
|
-
attributes.hasOwnProperty(property) &&
|
|
545
|
-
defaultValue.defined(attributes[property])
|
|
546
|
-
) {
|
|
547
|
-
const attribute = attributes[property];
|
|
548
|
-
count += 5 + attribute.values.length;
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
return count;
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
/**
|
|
557
|
-
* @private
|
|
558
|
-
*/
|
|
559
|
-
PrimitivePipeline.packCreateGeometryResults = function (
|
|
560
|
-
items,
|
|
561
|
-
transferableObjects
|
|
562
|
-
) {
|
|
563
|
-
const packedData = new Float64Array(countCreateGeometryResults(items));
|
|
564
|
-
const stringTable = [];
|
|
565
|
-
const stringHash = {};
|
|
566
|
-
|
|
567
|
-
const length = items.length;
|
|
568
|
-
let count = 0;
|
|
569
|
-
packedData[count++] = length;
|
|
570
|
-
for (let i = 0; i < length; i++) {
|
|
571
|
-
const geometry = items[i];
|
|
572
|
-
|
|
573
|
-
const validGeometry = defaultValue.defined(geometry);
|
|
574
|
-
packedData[count++] = validGeometry ? 1.0 : 0.0;
|
|
575
|
-
|
|
576
|
-
if (!validGeometry) {
|
|
577
|
-
continue;
|
|
578
|
-
}
|
|
579
|
-
|
|
580
|
-
packedData[count++] = geometry.primitiveType;
|
|
581
|
-
packedData[count++] = geometry.geometryType;
|
|
582
|
-
packedData[count++] = defaultValue.defaultValue(geometry.offsetAttribute, -1);
|
|
583
|
-
|
|
584
|
-
const validBoundingSphere = defaultValue.defined(geometry.boundingSphere) ? 1.0 : 0.0;
|
|
585
|
-
packedData[count++] = validBoundingSphere;
|
|
586
|
-
if (validBoundingSphere) {
|
|
587
|
-
Transforms.BoundingSphere.pack(geometry.boundingSphere, packedData, count);
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
count += Transforms.BoundingSphere.packedLength;
|
|
591
|
-
|
|
592
|
-
const validBoundingSphereCV = defaultValue.defined(geometry.boundingSphereCV)
|
|
593
|
-
? 1.0
|
|
594
|
-
: 0.0;
|
|
595
|
-
packedData[count++] = validBoundingSphereCV;
|
|
596
|
-
if (validBoundingSphereCV) {
|
|
597
|
-
Transforms.BoundingSphere.pack(geometry.boundingSphereCV, packedData, count);
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
count += Transforms.BoundingSphere.packedLength;
|
|
601
|
-
|
|
602
|
-
const attributes = geometry.attributes;
|
|
603
|
-
const attributesToWrite = [];
|
|
604
|
-
for (const property in attributes) {
|
|
605
|
-
if (
|
|
606
|
-
attributes.hasOwnProperty(property) &&
|
|
607
|
-
defaultValue.defined(attributes[property])
|
|
608
|
-
) {
|
|
609
|
-
attributesToWrite.push(property);
|
|
610
|
-
if (!defaultValue.defined(stringHash[property])) {
|
|
611
|
-
stringHash[property] = stringTable.length;
|
|
612
|
-
stringTable.push(property);
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
packedData[count++] = attributesToWrite.length;
|
|
618
|
-
for (let q = 0; q < attributesToWrite.length; q++) {
|
|
619
|
-
const name = attributesToWrite[q];
|
|
620
|
-
const attribute = attributes[name];
|
|
621
|
-
packedData[count++] = stringHash[name];
|
|
622
|
-
packedData[count++] = attribute.componentDatatype;
|
|
623
|
-
packedData[count++] = attribute.componentsPerAttribute;
|
|
624
|
-
packedData[count++] = attribute.normalize ? 1 : 0;
|
|
625
|
-
packedData[count++] = attribute.values.length;
|
|
626
|
-
packedData.set(attribute.values, count);
|
|
627
|
-
count += attribute.values.length;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
const indicesLength = defaultValue.defined(geometry.indices)
|
|
631
|
-
? geometry.indices.length
|
|
632
|
-
: 0;
|
|
633
|
-
packedData[count++] = indicesLength;
|
|
634
|
-
|
|
635
|
-
if (indicesLength > 0) {
|
|
636
|
-
packedData.set(geometry.indices, count);
|
|
637
|
-
count += indicesLength;
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
transferableObjects.push(packedData.buffer);
|
|
642
|
-
|
|
643
|
-
return {
|
|
644
|
-
stringTable: stringTable,
|
|
645
|
-
packedData: packedData,
|
|
646
|
-
};
|
|
647
|
-
};
|
|
648
|
-
|
|
649
|
-
/**
|
|
650
|
-
* @private
|
|
651
|
-
*/
|
|
652
|
-
PrimitivePipeline.unpackCreateGeometryResults = function (
|
|
653
|
-
createGeometryResult
|
|
654
|
-
) {
|
|
655
|
-
const stringTable = createGeometryResult.stringTable;
|
|
656
|
-
const packedGeometry = createGeometryResult.packedData;
|
|
657
|
-
|
|
658
|
-
let i;
|
|
659
|
-
const result = new Array(packedGeometry[0]);
|
|
660
|
-
let resultIndex = 0;
|
|
661
|
-
|
|
662
|
-
let packedGeometryIndex = 1;
|
|
663
|
-
while (packedGeometryIndex < packedGeometry.length) {
|
|
664
|
-
const valid = packedGeometry[packedGeometryIndex++] === 1.0;
|
|
665
|
-
if (!valid) {
|
|
666
|
-
result[resultIndex++] = undefined;
|
|
667
|
-
continue;
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
const primitiveType = packedGeometry[packedGeometryIndex++];
|
|
671
|
-
const geometryType = packedGeometry[packedGeometryIndex++];
|
|
672
|
-
let offsetAttribute = packedGeometry[packedGeometryIndex++];
|
|
673
|
-
if (offsetAttribute === -1) {
|
|
674
|
-
offsetAttribute = undefined;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
let boundingSphere;
|
|
678
|
-
let boundingSphereCV;
|
|
679
|
-
|
|
680
|
-
const validBoundingSphere = packedGeometry[packedGeometryIndex++] === 1.0;
|
|
681
|
-
if (validBoundingSphere) {
|
|
682
|
-
boundingSphere = Transforms.BoundingSphere.unpack(
|
|
683
|
-
packedGeometry,
|
|
684
|
-
packedGeometryIndex
|
|
685
|
-
);
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
packedGeometryIndex += Transforms.BoundingSphere.packedLength;
|
|
689
|
-
|
|
690
|
-
const validBoundingSphereCV = packedGeometry[packedGeometryIndex++] === 1.0;
|
|
691
|
-
if (validBoundingSphereCV) {
|
|
692
|
-
boundingSphereCV = Transforms.BoundingSphere.unpack(
|
|
693
|
-
packedGeometry,
|
|
694
|
-
packedGeometryIndex
|
|
695
|
-
);
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
packedGeometryIndex += Transforms.BoundingSphere.packedLength;
|
|
699
|
-
|
|
700
|
-
let length;
|
|
701
|
-
let values;
|
|
702
|
-
let componentsPerAttribute;
|
|
703
|
-
const attributes = new GeometryAttributes.GeometryAttributes();
|
|
704
|
-
const numAttributes = packedGeometry[packedGeometryIndex++];
|
|
705
|
-
for (i = 0; i < numAttributes; i++) {
|
|
706
|
-
const name = stringTable[packedGeometry[packedGeometryIndex++]];
|
|
707
|
-
const componentDatatype = packedGeometry[packedGeometryIndex++];
|
|
708
|
-
componentsPerAttribute = packedGeometry[packedGeometryIndex++];
|
|
709
|
-
const normalize = packedGeometry[packedGeometryIndex++] !== 0;
|
|
710
|
-
|
|
711
|
-
length = packedGeometry[packedGeometryIndex++];
|
|
712
|
-
values = ComponentDatatype.ComponentDatatype.createTypedArray(componentDatatype, length);
|
|
713
|
-
for (let valuesIndex = 0; valuesIndex < length; valuesIndex++) {
|
|
714
|
-
values[valuesIndex] = packedGeometry[packedGeometryIndex++];
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
attributes[name] = new GeometryAttribute.GeometryAttribute({
|
|
718
|
-
componentDatatype: componentDatatype,
|
|
719
|
-
componentsPerAttribute: componentsPerAttribute,
|
|
720
|
-
normalize: normalize,
|
|
721
|
-
values: values,
|
|
722
|
-
});
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
let indices;
|
|
726
|
-
length = packedGeometry[packedGeometryIndex++];
|
|
727
|
-
|
|
728
|
-
if (length > 0) {
|
|
729
|
-
const numberOfVertices = values.length / componentsPerAttribute;
|
|
730
|
-
indices = IndexDatatype.IndexDatatype.createTypedArray(numberOfVertices, length);
|
|
731
|
-
for (i = 0; i < length; i++) {
|
|
732
|
-
indices[i] = packedGeometry[packedGeometryIndex++];
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
result[resultIndex++] = new GeometryAttribute.Geometry({
|
|
737
|
-
primitiveType: primitiveType,
|
|
738
|
-
geometryType: geometryType,
|
|
739
|
-
boundingSphere: boundingSphere,
|
|
740
|
-
boundingSphereCV: boundingSphereCV,
|
|
741
|
-
indices: indices,
|
|
742
|
-
attributes: attributes,
|
|
743
|
-
offsetAttribute: offsetAttribute,
|
|
744
|
-
});
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
return result;
|
|
748
|
-
};
|
|
749
|
-
|
|
750
|
-
function packInstancesForCombine(instances, transferableObjects) {
|
|
751
|
-
const length = instances.length;
|
|
752
|
-
const packedData = new Float64Array(1 + length * 19);
|
|
753
|
-
let count = 0;
|
|
754
|
-
packedData[count++] = length;
|
|
755
|
-
for (let i = 0; i < length; i++) {
|
|
756
|
-
const instance = instances[i];
|
|
757
|
-
Matrix2.Matrix4.pack(instance.modelMatrix, packedData, count);
|
|
758
|
-
count += Matrix2.Matrix4.packedLength;
|
|
759
|
-
if (defaultValue.defined(instance.attributes) && defaultValue.defined(instance.attributes.offset)) {
|
|
760
|
-
const values = instance.attributes.offset.value;
|
|
761
|
-
packedData[count] = values[0];
|
|
762
|
-
packedData[count + 1] = values[1];
|
|
763
|
-
packedData[count + 2] = values[2];
|
|
764
|
-
}
|
|
765
|
-
count += 3;
|
|
766
|
-
}
|
|
767
|
-
transferableObjects.push(packedData.buffer);
|
|
768
|
-
|
|
769
|
-
return packedData;
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
function unpackInstancesForCombine(data) {
|
|
773
|
-
const packedInstances = data;
|
|
774
|
-
const result = new Array(packedInstances[0]);
|
|
775
|
-
let count = 0;
|
|
776
|
-
|
|
777
|
-
let i = 1;
|
|
778
|
-
while (i < packedInstances.length) {
|
|
779
|
-
const modelMatrix = Matrix2.Matrix4.unpack(packedInstances, i);
|
|
780
|
-
let attributes;
|
|
781
|
-
i += Matrix2.Matrix4.packedLength;
|
|
782
|
-
if (defaultValue.defined(packedInstances[i])) {
|
|
783
|
-
attributes = {
|
|
784
|
-
offset: new OffsetGeometryInstanceAttribute(
|
|
785
|
-
packedInstances[i],
|
|
786
|
-
packedInstances[i + 1],
|
|
787
|
-
packedInstances[i + 2]
|
|
788
|
-
),
|
|
789
|
-
};
|
|
790
|
-
}
|
|
791
|
-
i += 3;
|
|
792
|
-
|
|
793
|
-
result[count++] = {
|
|
794
|
-
modelMatrix: modelMatrix,
|
|
795
|
-
attributes: attributes,
|
|
796
|
-
};
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
return result;
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
/**
|
|
803
|
-
* @private
|
|
804
|
-
*/
|
|
805
|
-
PrimitivePipeline.packCombineGeometryParameters = function (
|
|
806
|
-
parameters,
|
|
807
|
-
transferableObjects
|
|
808
|
-
) {
|
|
809
|
-
const createGeometryResults = parameters.createGeometryResults;
|
|
810
|
-
const length = createGeometryResults.length;
|
|
811
|
-
|
|
812
|
-
for (let i = 0; i < length; i++) {
|
|
813
|
-
transferableObjects.push(createGeometryResults[i].packedData.buffer);
|
|
814
|
-
}
|
|
815
|
-
|
|
816
|
-
return {
|
|
817
|
-
createGeometryResults: parameters.createGeometryResults,
|
|
818
|
-
packedInstances: packInstancesForCombine(
|
|
819
|
-
parameters.instances,
|
|
820
|
-
transferableObjects
|
|
821
|
-
),
|
|
822
|
-
ellipsoid: parameters.ellipsoid,
|
|
823
|
-
isGeographic: parameters.projection instanceof Transforms.GeographicProjection,
|
|
824
|
-
elementIndexUintSupported: parameters.elementIndexUintSupported,
|
|
825
|
-
scene3DOnly: parameters.scene3DOnly,
|
|
826
|
-
vertexCacheOptimize: parameters.vertexCacheOptimize,
|
|
827
|
-
compressVertices: parameters.compressVertices,
|
|
828
|
-
modelMatrix: parameters.modelMatrix,
|
|
829
|
-
createPickOffsets: parameters.createPickOffsets,
|
|
830
|
-
};
|
|
831
|
-
};
|
|
832
|
-
|
|
833
|
-
/**
|
|
834
|
-
* @private
|
|
835
|
-
*/
|
|
836
|
-
PrimitivePipeline.unpackCombineGeometryParameters = function (
|
|
837
|
-
packedParameters
|
|
838
|
-
) {
|
|
839
|
-
const instances = unpackInstancesForCombine(packedParameters.packedInstances);
|
|
840
|
-
const createGeometryResults = packedParameters.createGeometryResults;
|
|
841
|
-
const length = createGeometryResults.length;
|
|
842
|
-
let instanceIndex = 0;
|
|
843
|
-
|
|
844
|
-
for (let resultIndex = 0; resultIndex < length; resultIndex++) {
|
|
845
|
-
const geometries = PrimitivePipeline.unpackCreateGeometryResults(
|
|
846
|
-
createGeometryResults[resultIndex]
|
|
847
|
-
);
|
|
848
|
-
const geometriesLength = geometries.length;
|
|
849
|
-
for (
|
|
850
|
-
let geometryIndex = 0;
|
|
851
|
-
geometryIndex < geometriesLength;
|
|
852
|
-
geometryIndex++
|
|
853
|
-
) {
|
|
854
|
-
const geometry = geometries[geometryIndex];
|
|
855
|
-
const instance = instances[instanceIndex];
|
|
856
|
-
instance.geometry = geometry;
|
|
857
|
-
++instanceIndex;
|
|
858
|
-
}
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
const ellipsoid = Matrix3.Ellipsoid.clone(packedParameters.ellipsoid);
|
|
862
|
-
const projection = packedParameters.isGeographic
|
|
863
|
-
? new Transforms.GeographicProjection(ellipsoid)
|
|
864
|
-
: new WebMercatorProjection.WebMercatorProjection(ellipsoid);
|
|
865
|
-
|
|
866
|
-
return {
|
|
867
|
-
instances: instances,
|
|
868
|
-
ellipsoid: ellipsoid,
|
|
869
|
-
projection: projection,
|
|
870
|
-
elementIndexUintSupported: packedParameters.elementIndexUintSupported,
|
|
871
|
-
scene3DOnly: packedParameters.scene3DOnly,
|
|
872
|
-
vertexCacheOptimize: packedParameters.vertexCacheOptimize,
|
|
873
|
-
compressVertices: packedParameters.compressVertices,
|
|
874
|
-
modelMatrix: Matrix2.Matrix4.clone(packedParameters.modelMatrix),
|
|
875
|
-
createPickOffsets: packedParameters.createPickOffsets,
|
|
876
|
-
};
|
|
877
|
-
};
|
|
878
|
-
|
|
879
|
-
function packBoundingSpheres(boundingSpheres) {
|
|
880
|
-
const length = boundingSpheres.length;
|
|
881
|
-
const bufferLength = 1 + (Transforms.BoundingSphere.packedLength + 1) * length;
|
|
882
|
-
const buffer = new Float32Array(bufferLength);
|
|
883
|
-
|
|
884
|
-
let bufferIndex = 0;
|
|
885
|
-
buffer[bufferIndex++] = length;
|
|
886
|
-
|
|
887
|
-
for (let i = 0; i < length; ++i) {
|
|
888
|
-
const bs = boundingSpheres[i];
|
|
889
|
-
if (!defaultValue.defined(bs)) {
|
|
890
|
-
buffer[bufferIndex++] = 0.0;
|
|
891
|
-
} else {
|
|
892
|
-
buffer[bufferIndex++] = 1.0;
|
|
893
|
-
Transforms.BoundingSphere.pack(boundingSpheres[i], buffer, bufferIndex);
|
|
894
|
-
}
|
|
895
|
-
bufferIndex += Transforms.BoundingSphere.packedLength;
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
return buffer;
|
|
899
|
-
}
|
|
900
|
-
|
|
901
|
-
function unpackBoundingSpheres(buffer) {
|
|
902
|
-
const result = new Array(buffer[0]);
|
|
903
|
-
let count = 0;
|
|
904
|
-
|
|
905
|
-
let i = 1;
|
|
906
|
-
while (i < buffer.length) {
|
|
907
|
-
if (buffer[i++] === 1.0) {
|
|
908
|
-
result[count] = Transforms.BoundingSphere.unpack(buffer, i);
|
|
909
|
-
}
|
|
910
|
-
++count;
|
|
911
|
-
i += Transforms.BoundingSphere.packedLength;
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
return result;
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
/**
|
|
918
|
-
* @private
|
|
919
|
-
*/
|
|
920
|
-
PrimitivePipeline.packCombineGeometryResults = function (
|
|
921
|
-
results,
|
|
922
|
-
transferableObjects
|
|
923
|
-
) {
|
|
924
|
-
if (defaultValue.defined(results.geometries)) {
|
|
925
|
-
transferGeometries(results.geometries, transferableObjects);
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
const packedBoundingSpheres = packBoundingSpheres(results.boundingSpheres);
|
|
929
|
-
const packedBoundingSpheresCV = packBoundingSpheres(
|
|
930
|
-
results.boundingSpheresCV
|
|
931
|
-
);
|
|
932
|
-
transferableObjects.push(
|
|
933
|
-
packedBoundingSpheres.buffer,
|
|
934
|
-
packedBoundingSpheresCV.buffer
|
|
935
|
-
);
|
|
936
|
-
|
|
937
|
-
return {
|
|
938
|
-
geometries: results.geometries,
|
|
939
|
-
attributeLocations: results.attributeLocations,
|
|
940
|
-
modelMatrix: results.modelMatrix,
|
|
941
|
-
pickOffsets: results.pickOffsets,
|
|
942
|
-
offsetInstanceExtend: results.offsetInstanceExtend,
|
|
943
|
-
boundingSpheres: packedBoundingSpheres,
|
|
944
|
-
boundingSpheresCV: packedBoundingSpheresCV,
|
|
945
|
-
};
|
|
946
|
-
};
|
|
947
|
-
|
|
948
|
-
/**
|
|
949
|
-
* @private
|
|
950
|
-
*/
|
|
951
|
-
PrimitivePipeline.unpackCombineGeometryResults = function (packedResult) {
|
|
952
|
-
return {
|
|
953
|
-
geometries: packedResult.geometries,
|
|
954
|
-
attributeLocations: packedResult.attributeLocations,
|
|
955
|
-
modelMatrix: packedResult.modelMatrix,
|
|
956
|
-
pickOffsets: packedResult.pickOffsets,
|
|
957
|
-
offsetInstanceExtend: packedResult.offsetInstanceExtend,
|
|
958
|
-
boundingSpheres: unpackBoundingSpheres(packedResult.boundingSpheres),
|
|
959
|
-
boundingSpheresCV: unpackBoundingSpheres(packedResult.boundingSpheresCV),
|
|
960
|
-
};
|
|
961
|
-
};
|
|
962
|
-
var PrimitivePipeline$1 = PrimitivePipeline;
|
|
963
|
-
|
|
964
|
-
exports.PrimitivePipeline = PrimitivePipeline$1;
|
|
965
|
-
|
|
966
|
-
}));
|