@cesium/engine 16.0.0 → 18.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/z-worker-pako.js +1 -1
- package/Build/Workers/{chunk-OWLBD6BL.js → chunk-2AXPWBJG.js} +1 -1
- package/Build/Workers/{chunk-PB6SE3SZ.js → chunk-2CAYUY2B.js} +8 -8
- package/Build/Workers/{chunk-SCUQTTCN.js → chunk-2NKHPWDY.js} +12 -12
- package/Build/Workers/{chunk-YA4XALD5.js → chunk-2QNKQVUT.js} +5 -5
- package/Build/Workers/{chunk-WGIOUM2S.js → chunk-3RKVDGRF.js} +8 -8
- package/Build/Workers/{chunk-RWAFHSX3.js → chunk-4DSTDGY3.js} +2 -2
- package/Build/Workers/{chunk-YL26OJCG.js → chunk-4MIY63FM.js} +13 -13
- package/Build/Workers/{chunk-34EWMUFG.js → chunk-5OL6XFNS.js} +1 -1
- package/Build/Workers/{chunk-B75OO2DU.js → chunk-5WVF4BK7.js} +5 -5
- package/Build/Workers/{chunk-EAWYQ44R.js → chunk-AEGAQ6FD.js} +12 -12
- package/Build/Workers/{chunk-4LHK6E47.js → chunk-CES6DHHV.js} +1 -1
- package/Build/Workers/{chunk-S3IQBSIB.js → chunk-DINSLSJD.js} +6 -6
- package/Build/Workers/{chunk-KV6TEHXY.js → chunk-EHB2OCQX.js} +4 -4
- package/Build/Workers/{chunk-NREPBWCX.js → chunk-EXEZHW3P.js} +4 -4
- package/Build/Workers/{chunk-ICU72UPR.js → chunk-F4ZAKN4V.js} +2 -2
- package/Build/Workers/{chunk-S2NKKWYE.js → chunk-FPYBD2P5.js} +1 -1
- package/Build/Workers/{chunk-KKV6XBF5.js → chunk-GAUF4F5A.js} +16 -16
- package/Build/Workers/{chunk-ERKJ7IWJ.js → chunk-GM55YFOB.js} +14 -14
- package/Build/Workers/{chunk-NB6D74SQ.js → chunk-GS55WTRX.js} +6 -6
- package/Build/Workers/{chunk-5TN3LG2T.js → chunk-HQE7KSR4.js} +2 -2
- package/Build/Workers/{chunk-EO44CO62.js → chunk-HS76VTVY.js} +2 -2
- package/Build/Workers/{chunk-TL5YKZJF.js → chunk-I3BAKR4S.js} +16 -16
- package/Build/Workers/{chunk-OMFZ4IN6.js → chunk-IWGMVQGG.js} +9 -9
- package/Build/Workers/{chunk-VVTAI2TN.js → chunk-IWZK2AIH.js} +5 -5
- package/Build/Workers/{chunk-GQVSADCI.js → chunk-J4MAVE6J.js} +6 -6
- package/Build/Workers/{chunk-XF6EBVKV.js → chunk-JF4IYQYC.js} +7 -7
- package/Build/Workers/{chunk-CUJH7PS5.js → chunk-KGXTCGX3.js} +12 -12
- package/Build/Workers/{chunk-TBSA4MNF.js → chunk-KNA65INJ.js} +4 -4
- package/Build/Workers/{chunk-EOIUWEAK.js → chunk-LIPZUYNR.js} +11 -11
- package/Build/Workers/{chunk-TEUGW455.js → chunk-LWJWWCZ4.js} +6 -6
- package/Build/Workers/{chunk-ORIMMEHO.js → chunk-LZFUG3GO.js} +10 -10
- package/Build/Workers/{chunk-COOLDICB.js → chunk-MFGVMUN3.js} +5 -5
- package/Build/Workers/{chunk-FW2OX42E.js → chunk-NR7KSD56.js} +3 -3
- package/Build/Workers/{chunk-2TQ64T4I.js → chunk-NVJ5JRIM.js} +2 -2
- package/Build/Workers/{chunk-OMZGZVHI.js → chunk-NWSAYFZG.js} +6 -6
- package/Build/Workers/{chunk-PT6U7UNY.js → chunk-OATG6PKE.js} +12 -12
- package/Build/Workers/{chunk-M5J3S3HY.js → chunk-OIHAAHBK.js} +10 -10
- package/Build/Workers/{chunk-LCSH4ZOB.js → chunk-QN7JEOQV.js} +5 -5
- package/Build/Workers/{chunk-XMKE4XB2.js → chunk-QUSP3NWA.js} +5 -5
- package/Build/Workers/{chunk-ZLJDDRGB.js → chunk-RWFYLWSF.js} +9 -9
- package/Build/Workers/{chunk-OD4Q7HE5.js → chunk-SIOVJ4L5.js} +4 -4
- package/Build/Workers/{chunk-EJJDBH5W.js → chunk-T6B6H3GR.js} +7 -7
- package/Build/Workers/{chunk-YFXXUW6U.js → chunk-UK33ZN4K.js} +4 -4
- package/Build/Workers/{chunk-V4Y7C25O.js → chunk-VGJSKEIB.js} +4 -4
- package/Build/Workers/{chunk-VXAAIRJ7.js → chunk-W6CPO62M.js} +6 -6
- package/Build/Workers/{chunk-ILVAXLMC.js → chunk-WGHUCZMX.js} +7 -7
- package/Build/Workers/{chunk-GH6I7PBY.js → chunk-WTFZHPUW.js} +5 -5
- package/Build/Workers/{chunk-VNDECE6N.js → chunk-WYCR5DWQ.js} +2 -2
- package/Build/Workers/{chunk-6B7KGA5P.js → chunk-YV37YFUM.js} +9 -9
- package/Build/Workers/{chunk-CQNYYX3N.js → chunk-ZADJ6FRX.js} +4 -4
- package/Build/Workers/{chunk-ESED7XBA.js → chunk-ZIP27IX6.js} +6 -6
- package/Build/Workers/combineGeometry.js +21 -21
- package/Build/Workers/createBoxGeometry.js +15 -15
- package/Build/Workers/createBoxOutlineGeometry.js +13 -13
- package/Build/Workers/createCircleGeometry.js +23 -23
- package/Build/Workers/createCircleOutlineGeometry.js +16 -16
- package/Build/Workers/createCoplanarPolygonGeometry.js +30 -30
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +28 -28
- package/Build/Workers/createCorridorGeometry.js +26 -26
- package/Build/Workers/createCorridorOutlineGeometry.js +25 -25
- package/Build/Workers/createCylinderGeometry.js +17 -17
- package/Build/Workers/createCylinderOutlineGeometry.js +15 -15
- package/Build/Workers/createEllipseGeometry.js +23 -23
- package/Build/Workers/createEllipseOutlineGeometry.js +16 -16
- package/Build/Workers/createEllipsoidGeometry.js +16 -16
- package/Build/Workers/createEllipsoidOutlineGeometry.js +15 -15
- package/Build/Workers/createFrustumGeometry.js +15 -15
- package/Build/Workers/createFrustumOutlineGeometry.js +15 -15
- package/Build/Workers/createGeometry.js +21 -21
- package/Build/Workers/createGroundPolylineGeometry.js +19 -19
- package/Build/Workers/createPlaneGeometry.js +13 -13
- package/Build/Workers/createPlaneOutlineGeometry.js +12 -12
- package/Build/Workers/createPolygonGeometry.js +29 -29
- package/Build/Workers/createPolygonOutlineGeometry.js +27 -27
- package/Build/Workers/createPolylineGeometry.js +22 -22
- package/Build/Workers/createPolylineVolumeGeometry.js +28 -28
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +24 -24
- package/Build/Workers/createRectangleGeometry.js +24 -24
- package/Build/Workers/createRectangleOutlineGeometry.js +17 -17
- package/Build/Workers/createSimplePolylineGeometry.js +20 -20
- package/Build/Workers/createSphereGeometry.js +16 -16
- package/Build/Workers/createSphereOutlineGeometry.js +15 -15
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +12 -12
- package/Build/Workers/createVectorTileGeometries.js +21 -21
- package/Build/Workers/createVectorTilePoints.js +11 -11
- package/Build/Workers/createVectorTilePolygons.js +19 -19
- package/Build/Workers/createVectorTilePolylines.js +12 -12
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +19 -19
- package/Build/Workers/createVerticesFromHeightmap.js +19 -19
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +16 -16
- package/Build/Workers/createWallGeometry.js +21 -21
- package/Build/Workers/createWallOutlineGeometry.js +20 -20
- package/Build/Workers/decodeDraco.js +10 -10
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +9 -9
- package/Build/Workers/transcodeKTX2.js +25 -6
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +19 -19
- package/Source/Core/Check.d.ts +4 -1
- package/Source/Core/ITwinPlatform.js +6 -3
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/PixelFormat.js +36 -0
- package/Source/Core/PolygonGeometry.js +1 -0
- package/Source/Core/RectangleOutlineGeometry.js +1 -1
- package/Source/Renderer/Texture3D.js +568 -0
- package/Source/Renderer/createUniform.js +1 -0
- package/Source/Renderer/createUniformArray.js +1 -0
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Cesium3DTilesVoxelProvider.js +18 -23
- package/Source/Scene/Cesium3DTileset.js +138 -0
- package/Source/Scene/GlobeSurfaceShaderSet.js +4 -5
- package/Source/Scene/ImageryLayer.js +21 -6
- package/Source/Scene/ImageryLayerCollection.js +3 -2
- package/Source/Scene/Model/CartesianRectangle.js +108 -0
- package/Source/Scene/Model/ImageryConfiguration.js +25 -0
- package/Source/Scene/Model/ImageryCoverage.js +488 -0
- package/Source/Scene/Model/ImageryFlags.js +31 -0
- package/Source/Scene/Model/ImageryInput.js +60 -0
- package/Source/Scene/Model/ImageryPipelineStage.js +1040 -0
- package/Source/Scene/Model/MappedPositions.js +84 -0
- package/Source/Scene/Model/Model.js +38 -0
- package/Source/Scene/Model/ModelImagery.js +403 -0
- package/Source/Scene/Model/ModelImageryMapping.js +489 -0
- package/Source/Scene/Model/ModelPrimitiveImagery.js +972 -0
- package/Source/Scene/Model/ModelReader.js +810 -0
- package/Source/Scene/Model/ModelRenderResources.js +13 -0
- package/Source/Scene/Model/ModelRuntimePrimitive.js +19 -0
- package/Source/Scene/Model/ModelSceneGraph.js +133 -27
- package/Source/Scene/Model/NodeRenderResources.js +10 -0
- package/Source/Scene/ModelComponents.js +10 -0
- package/Source/Scene/QuadtreePrimitive.js +5 -1
- package/Source/Scene/VoxelBoxShape.js +38 -81
- package/Source/Scene/VoxelCylinderShape.js +128 -262
- package/Source/Scene/VoxelPrimitive.js +24 -39
- package/Source/Scene/VoxelRenderResources.js +1 -1
- package/Source/Scene/processVoxelProperties.js +41 -100
- package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +0 -1
- package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +0 -1
- package/Source/Shaders/GlobeFS.glsl +22 -0
- package/Source/Shaders/GlobeFS.js +22 -0
- package/Source/Shaders/Model/MaterialStageFS.glsl +4 -0
- package/Source/Shaders/Model/MaterialStageFS.js +4 -0
- package/Source/Shaders/Model/ModelVS.glsl +4 -0
- package/Source/Shaders/Model/ModelVS.js +4 -0
- package/Source/Shaders/PolylineCommon.glsl +1 -1
- package/Source/Shaders/PolylineCommon.js +1 -1
- package/Source/Shaders/Voxels/IntersectDepth.glsl +10 -3
- package/Source/Shaders/Voxels/IntersectDepth.js +10 -3
- package/Source/Shaders/Voxels/Intersection.glsl +1 -3
- package/Source/Shaders/Voxels/Intersection.js +1 -3
- package/Source/Shaders/Voxels/IntersectionUtils.glsl +1 -0
- package/Source/Shaders/Voxels/IntersectionUtils.js +1 -0
- package/Source/Shaders/Voxels/VoxelFS.glsl +37 -24
- package/Source/Shaders/Voxels/VoxelFS.js +37 -24
- package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
- package/index.d.ts +59 -7
- package/index.js +74 -62
- package/package.json +3 -3
|
@@ -29,9 +29,7 @@ RayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, out Interse
|
|
|
29
29
|
#endif\n\
|
|
30
30
|
\n\
|
|
31
31
|
// Depth\n\
|
|
32
|
-
|
|
33
|
-
intersectDepth(screenCoord, ray, ix);\n\
|
|
34
|
-
#endif\n\
|
|
32
|
+
intersectDepth(screenCoord, ray, ix);\n\
|
|
35
33
|
\n\
|
|
36
34
|
// Find the first intersection that's in front of the ray\n\
|
|
37
35
|
#if (INTERSECTION_COUNT > 1)\n\
|
|
@@ -56,6 +56,7 @@ struct Intersections {
|
|
|
56
56
|
// INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections,
|
|
57
57
|
// so we need twice as many to track ray-*surface* intersections
|
|
58
58
|
vec4 intersections[INTERSECTION_COUNT * 2];
|
|
59
|
+
float distanceToDepthBuffer;
|
|
59
60
|
|
|
60
61
|
#if (INTERSECTION_COUNT > 1)
|
|
61
62
|
// Maintain state for future nextIntersection calls
|
|
@@ -57,6 +57,7 @@ struct Intersections {\n\
|
|
|
57
57
|
// INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections,\n\
|
|
58
58
|
// so we need twice as many to track ray-*surface* intersections\n\
|
|
59
59
|
vec4 intersections[INTERSECTION_COUNT * 2];\n\
|
|
60
|
+
float distanceToDepthBuffer;\n\
|
|
60
61
|
\n\
|
|
61
62
|
#if (INTERSECTION_COUNT > 1)\n\
|
|
62
63
|
// Maintain state for future nextIntersection calls\n\
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
#define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0
|
|
16
16
|
#endif
|
|
17
17
|
|
|
18
|
+
uniform mat4 u_transformPositionUvToView;
|
|
18
19
|
uniform mat3 u_transformDirectionViewToLocal;
|
|
19
20
|
uniform vec3 u_cameraPositionUv;
|
|
21
|
+
uniform vec3 u_cameraDirectionUv;
|
|
20
22
|
uniform float u_stepSize;
|
|
21
23
|
|
|
22
24
|
#if defined(PICKING)
|
|
@@ -111,26 +113,38 @@ int getSampleIndex(in SampleData sampleData) {
|
|
|
111
113
|
return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z);
|
|
112
114
|
}
|
|
113
115
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
vec3
|
|
120
|
-
vec3
|
|
121
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Compute the view ray at the current fragment, in the local UV coordinates of the shape.
|
|
118
|
+
*/
|
|
119
|
+
Ray getViewRayUv() {
|
|
120
|
+
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);
|
|
121
|
+
vec3 viewDirUv;
|
|
122
|
+
vec3 viewPosUv;
|
|
123
|
+
if (czm_orthographicIn3D == 1.0) {
|
|
124
|
+
eyeCoordinates.z = 0.0;
|
|
125
|
+
viewPosUv = (u_transformPositionViewToUv * eyeCoordinates).xyz;
|
|
126
|
+
viewDirUv = normalize(u_cameraDirectionUv);
|
|
127
|
+
} else {
|
|
128
|
+
viewPosUv = u_cameraPositionUv;
|
|
129
|
+
viewDirUv = normalize(u_transformDirectionViewToLocal * eyeCoordinates.xyz);
|
|
130
|
+
}
|
|
122
131
|
#if defined(SHAPE_ELLIPSOID)
|
|
123
132
|
// viewDirUv has been scaled to a space where the ellipsoid is a sphere.
|
|
124
133
|
// Undo this scaling to get the raw direction.
|
|
125
134
|
vec3 rawDir = viewDirUv * u_ellipsoidRadiiUv;
|
|
126
|
-
|
|
135
|
+
return Ray(viewPosUv, viewDirUv, rawDir);
|
|
127
136
|
#else
|
|
128
|
-
|
|
137
|
+
return Ray(viewPosUv, viewDirUv, viewDirUv);
|
|
129
138
|
#endif
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
void main()
|
|
142
|
+
{
|
|
143
|
+
Ray viewRayUv = getViewRayUv();
|
|
130
144
|
|
|
131
145
|
Intersections ix;
|
|
146
|
+
vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]
|
|
132
147
|
RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayUv, ix);
|
|
133
|
-
|
|
134
148
|
// Exit early if the scene was completely missed.
|
|
135
149
|
if (shapeIntersection.entry.w == NO_HIT) {
|
|
136
150
|
discard;
|
|
@@ -138,7 +152,7 @@ void main()
|
|
|
138
152
|
|
|
139
153
|
float currentT = shapeIntersection.entry.w;
|
|
140
154
|
float endT = shapeIntersection.exit.w;
|
|
141
|
-
vec3 positionUv =
|
|
155
|
+
vec3 positionUv = viewRayUv.pos + currentT * viewRayUv.dir;
|
|
142
156
|
PointJacobianT pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv);
|
|
143
157
|
|
|
144
158
|
// Traverse the tree from the start position
|
|
@@ -150,14 +164,15 @@ void main()
|
|
|
150
164
|
#if defined(JITTER)
|
|
151
165
|
float noise = hash(screenCoord); // [0,1]
|
|
152
166
|
currentT += noise * step.w;
|
|
153
|
-
positionUv += noise * step.w *
|
|
167
|
+
positionUv += noise * step.w * viewRayUv.dir;
|
|
154
168
|
#endif
|
|
155
169
|
|
|
156
170
|
FragmentInput fragmentInput;
|
|
157
171
|
#if defined(STATISTICS)
|
|
158
|
-
setStatistics(fragmentInput.
|
|
172
|
+
setStatistics(fragmentInput.metadataStatistics);
|
|
159
173
|
#endif
|
|
160
174
|
|
|
175
|
+
czm_modelMaterial materialOutput;
|
|
161
176
|
vec4 colorAccum = vec4(0.0);
|
|
162
177
|
|
|
163
178
|
for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {
|
|
@@ -166,19 +181,19 @@ void main()
|
|
|
166
181
|
|
|
167
182
|
// Prepare the custom shader inputs
|
|
168
183
|
copyPropertiesToMetadata(properties, fragmentInput.metadata);
|
|
169
|
-
|
|
170
|
-
fragmentInput.
|
|
171
|
-
fragmentInput.
|
|
172
|
-
|
|
173
|
-
fragmentInput.voxel.
|
|
174
|
-
|
|
184
|
+
|
|
185
|
+
fragmentInput.attributes.positionEC = vec3(u_transformPositionUvToView * vec4(positionUv, 1.0));
|
|
186
|
+
fragmentInput.attributes.normalEC = normalize(czm_normal * step.xyz);
|
|
187
|
+
|
|
188
|
+
fragmentInput.voxel.viewDirUv = viewRayUv.dir;
|
|
189
|
+
|
|
175
190
|
fragmentInput.voxel.travelDistance = step.w;
|
|
176
191
|
fragmentInput.voxel.stepCount = stepCount;
|
|
177
192
|
fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex;
|
|
178
193
|
fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]);
|
|
194
|
+
fragmentInput.voxel.distanceToDepthBuffer = ix.distanceToDepthBuffer - currentT;
|
|
179
195
|
|
|
180
196
|
// Run the custom shader
|
|
181
|
-
czm_modelMaterial materialOutput;
|
|
182
197
|
fragmentMain(fragmentInput, materialOutput);
|
|
183
198
|
|
|
184
199
|
// Sanitize the custom shader output
|
|
@@ -203,8 +218,6 @@ void main()
|
|
|
203
218
|
|
|
204
219
|
// Keep raymarching
|
|
205
220
|
currentT += step.w;
|
|
206
|
-
positionUv = viewPosUv + currentT * viewDirUv;
|
|
207
|
-
|
|
208
221
|
// Check if there's more intersections.
|
|
209
222
|
if (currentT > endT) {
|
|
210
223
|
#if (INTERSECTION_COUNT == 1)
|
|
@@ -217,10 +230,10 @@ void main()
|
|
|
217
230
|
// Found another intersection. Resume raymarching there
|
|
218
231
|
currentT = shapeIntersection.entry.w;
|
|
219
232
|
endT = shapeIntersection.exit.w;
|
|
220
|
-
positionUv = viewPosUv + currentT * viewDirUv;
|
|
221
233
|
}
|
|
222
234
|
#endif
|
|
223
235
|
}
|
|
236
|
+
positionUv = viewRayUv.pos + currentT * viewRayUv.dir;
|
|
224
237
|
|
|
225
238
|
// Traverse the tree from the current ray position.
|
|
226
239
|
// This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.
|
|
@@ -16,8 +16,10 @@ export default "// See Intersection.glsl for the definition of intersectScene\n\
|
|
|
16
16
|
#define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\n\
|
|
17
17
|
#endif\n\
|
|
18
18
|
\n\
|
|
19
|
+
uniform mat4 u_transformPositionUvToView;\n\
|
|
19
20
|
uniform mat3 u_transformDirectionViewToLocal;\n\
|
|
20
21
|
uniform vec3 u_cameraPositionUv;\n\
|
|
22
|
+
uniform vec3 u_cameraDirectionUv;\n\
|
|
21
23
|
uniform float u_stepSize;\n\
|
|
22
24
|
\n\
|
|
23
25
|
#if defined(PICKING)\n\
|
|
@@ -112,26 +114,38 @@ int getSampleIndex(in SampleData sampleData) {\n\
|
|
|
112
114
|
return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z);\n\
|
|
113
115
|
}\n\
|
|
114
116
|
\n\
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
vec3
|
|
121
|
-
vec3
|
|
122
|
-
|
|
117
|
+
/**\n\
|
|
118
|
+
* Compute the view ray at the current fragment, in the local UV coordinates of the shape.\n\
|
|
119
|
+
*/\n\
|
|
120
|
+
Ray getViewRayUv() {\n\
|
|
121
|
+
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\n\
|
|
122
|
+
vec3 viewDirUv;\n\
|
|
123
|
+
vec3 viewPosUv;\n\
|
|
124
|
+
if (czm_orthographicIn3D == 1.0) {\n\
|
|
125
|
+
eyeCoordinates.z = 0.0;\n\
|
|
126
|
+
viewPosUv = (u_transformPositionViewToUv * eyeCoordinates).xyz;\n\
|
|
127
|
+
viewDirUv = normalize(u_cameraDirectionUv);\n\
|
|
128
|
+
} else {\n\
|
|
129
|
+
viewPosUv = u_cameraPositionUv;\n\
|
|
130
|
+
viewDirUv = normalize(u_transformDirectionViewToLocal * eyeCoordinates.xyz);\n\
|
|
131
|
+
}\n\
|
|
123
132
|
#if defined(SHAPE_ELLIPSOID)\n\
|
|
124
133
|
// viewDirUv has been scaled to a space where the ellipsoid is a sphere.\n\
|
|
125
134
|
// Undo this scaling to get the raw direction.\n\
|
|
126
135
|
vec3 rawDir = viewDirUv * u_ellipsoidRadiiUv;\n\
|
|
127
|
-
|
|
136
|
+
return Ray(viewPosUv, viewDirUv, rawDir);\n\
|
|
128
137
|
#else\n\
|
|
129
|
-
|
|
138
|
+
return Ray(viewPosUv, viewDirUv, viewDirUv);\n\
|
|
130
139
|
#endif\n\
|
|
140
|
+
}\n\
|
|
141
|
+
\n\
|
|
142
|
+
void main()\n\
|
|
143
|
+
{\n\
|
|
144
|
+
Ray viewRayUv = getViewRayUv();\n\
|
|
131
145
|
\n\
|
|
132
146
|
Intersections ix;\n\
|
|
147
|
+
vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]\n\
|
|
133
148
|
RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayUv, ix);\n\
|
|
134
|
-
\n\
|
|
135
149
|
// Exit early if the scene was completely missed.\n\
|
|
136
150
|
if (shapeIntersection.entry.w == NO_HIT) {\n\
|
|
137
151
|
discard;\n\
|
|
@@ -139,7 +153,7 @@ void main()\n\
|
|
|
139
153
|
\n\
|
|
140
154
|
float currentT = shapeIntersection.entry.w;\n\
|
|
141
155
|
float endT = shapeIntersection.exit.w;\n\
|
|
142
|
-
vec3 positionUv =
|
|
156
|
+
vec3 positionUv = viewRayUv.pos + currentT * viewRayUv.dir;\n\
|
|
143
157
|
PointJacobianT pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv);\n\
|
|
144
158
|
\n\
|
|
145
159
|
// Traverse the tree from the start position\n\
|
|
@@ -151,14 +165,15 @@ void main()\n\
|
|
|
151
165
|
#if defined(JITTER)\n\
|
|
152
166
|
float noise = hash(screenCoord); // [0,1]\n\
|
|
153
167
|
currentT += noise * step.w;\n\
|
|
154
|
-
positionUv += noise * step.w *
|
|
168
|
+
positionUv += noise * step.w * viewRayUv.dir;\n\
|
|
155
169
|
#endif\n\
|
|
156
170
|
\n\
|
|
157
171
|
FragmentInput fragmentInput;\n\
|
|
158
172
|
#if defined(STATISTICS)\n\
|
|
159
|
-
setStatistics(fragmentInput.
|
|
173
|
+
setStatistics(fragmentInput.metadataStatistics);\n\
|
|
160
174
|
#endif\n\
|
|
161
175
|
\n\
|
|
176
|
+
czm_modelMaterial materialOutput;\n\
|
|
162
177
|
vec4 colorAccum = vec4(0.0);\n\
|
|
163
178
|
\n\
|
|
164
179
|
for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {\n\
|
|
@@ -167,19 +182,19 @@ void main()\n\
|
|
|
167
182
|
\n\
|
|
168
183
|
// Prepare the custom shader inputs\n\
|
|
169
184
|
copyPropertiesToMetadata(properties, fragmentInput.metadata);\n\
|
|
170
|
-
|
|
171
|
-
fragmentInput.
|
|
172
|
-
fragmentInput.
|
|
173
|
-
|
|
174
|
-
fragmentInput.voxel.
|
|
175
|
-
|
|
185
|
+
\n\
|
|
186
|
+
fragmentInput.attributes.positionEC = vec3(u_transformPositionUvToView * vec4(positionUv, 1.0));\n\
|
|
187
|
+
fragmentInput.attributes.normalEC = normalize(czm_normal * step.xyz);\n\
|
|
188
|
+
\n\
|
|
189
|
+
fragmentInput.voxel.viewDirUv = viewRayUv.dir;\n\
|
|
190
|
+
\n\
|
|
176
191
|
fragmentInput.voxel.travelDistance = step.w;\n\
|
|
177
192
|
fragmentInput.voxel.stepCount = stepCount;\n\
|
|
178
193
|
fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex;\n\
|
|
179
194
|
fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]);\n\
|
|
195
|
+
fragmentInput.voxel.distanceToDepthBuffer = ix.distanceToDepthBuffer - currentT;\n\
|
|
180
196
|
\n\
|
|
181
197
|
// Run the custom shader\n\
|
|
182
|
-
czm_modelMaterial materialOutput;\n\
|
|
183
198
|
fragmentMain(fragmentInput, materialOutput);\n\
|
|
184
199
|
\n\
|
|
185
200
|
// Sanitize the custom shader output\n\
|
|
@@ -204,8 +219,6 @@ void main()\n\
|
|
|
204
219
|
\n\
|
|
205
220
|
// Keep raymarching\n\
|
|
206
221
|
currentT += step.w;\n\
|
|
207
|
-
positionUv = viewPosUv + currentT * viewDirUv;\n\
|
|
208
|
-
\n\
|
|
209
222
|
// Check if there's more intersections.\n\
|
|
210
223
|
if (currentT > endT) {\n\
|
|
211
224
|
#if (INTERSECTION_COUNT == 1)\n\
|
|
@@ -218,10 +231,10 @@ void main()\n\
|
|
|
218
231
|
// Found another intersection. Resume raymarching there\n\
|
|
219
232
|
currentT = shapeIntersection.entry.w;\n\
|
|
220
233
|
endT = shapeIntersection.exit.w;\n\
|
|
221
|
-
positionUv = viewPosUv + currentT * viewDirUv;\n\
|
|
222
234
|
}\n\
|
|
223
235
|
#endif\n\
|
|
224
236
|
}\n\
|
|
237
|
+
positionUv = viewRayUv.pos + currentT * viewRayUv.dir;\n\
|
|
225
238
|
\n\
|
|
226
239
|
// Traverse the tree from the current ray position.\n\
|
|
227
240
|
// This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.\n\
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";const{Array:e,Object:t,Number:n,Math:s,Error:r,Uint8Array:a,Uint16Array:o,Uint32Array:i,Int32Array:c,Map:l,DataView:u,Promise:h,TextEncoder:f,crypto:p,postMessage:d,TransformStream:g,ReadableStream:w,WritableStream:y,CompressionStream:m,DecompressionStream:_}=self,b=void 0,S="undefined",v="function";class k{constructor(e){return class extends g{constructor(t,n){const s=new e(n);super({transform(e,t){t.enqueue(s.append(e))},flush(e){const t=s.flush();t&&e.enqueue(t)}})}}}}const z=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;z[e]=t}class D{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let n=0,s=0|e.length;s>n;n++)t=t>>>8^z[255&(t^e[n])];this.crc=t}get(){return~this.crc}}class C extends g{constructor(){let e;const t=new D;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new a(4);new u(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const I={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],s=I.getPartial(n);return 32===s?e.concat(t):I._shiftRight(t,s,0|n,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+I.getPartial(n)},clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,s.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=I.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,getPartial:e=>s.round(e/1099511627776)||32,_shiftRight(e,t,n,s){for(void 0===s&&(s=[]);t>=32;t-=32)s.push(n),n=0;if(0===t)return s.concat(e);for(let r=0;r<e.length;r++)s.push(n|e[r]>>>t),n=e[r]<<32-t;const r=e.length?e[e.length-1]:0,a=I.getPartial(r);return s.push(I.partial(t+a&31,t+a>32?n:s.pop(),1)),s}},A={bytes:{fromBits(e){const t=I.bitLength(e)/8,n=new a(t);let s;for(let r=0;t>r;r++)3&r||(s=e[r/4]),n[r]=s>>>24,s<<=8;return n},toBits(e){const t=[];let n,s=0;for(n=0;n<e.length;n++)s=s<<8|e[n],3&~n||(t.push(s),s=0);return 3&n&&t.push(I.partial(8*(3&n),s)),t}}},q=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=A.utf8String.toBits(e));const n=t._buffer=I.concat(t._buffer,e),s=t._length,a=t._length=s+I.bitLength(e);if(a>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const o=new i(n);let c=0;for(let e=t.blockSize+s-(t.blockSize+s&t.blockSize-1);a>=e;e+=t.blockSize)t._block(o.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),t}finalize(){const e=this;let t=e._buffer;const n=e._h;t=I.concat(t,[I.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(s.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,s){return e>19?e>39?e>59?e>79?void 0:t^n^s:t&n|t&s|n&s:t^n^s:t&n|~t&s}_S(e,t){return t<<e|t>>>32-e}_block(t){const n=this,r=n._h,a=e(80);for(let e=0;16>e;e++)a[e]=t[e];let o=r[0],i=r[1],c=r[2],l=r[3],u=r[4];for(let e=0;79>=e;e++){16>e||(a[e]=n._S(1,a[e-3]^a[e-8]^a[e-14]^a[e-16]));const t=n._S(5,o)+n._f(e,i,c,l)+u+a[e]+n._key[s.floor(e/20)]|0;u=l,l=c,c=n._S(30,i),i=o,o=t}r[0]=r[0]+o|0,r[1]=r[1]+i|0,r[2]=r[2]+c|0,r[3]=r[3]+l|0,r[4]=r[4]+u|0}},R={getRandomValues(e){const t=new i(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(s.random()>.5?1:-1))};for(let r,a=0;a<e.length;a+=4){const e=n(4294967296*(r||s.random()));r=987654071*e(),t[a/4]=4294967296*e()|0}return e}},H={importKey:e=>new H.hmacSha1(A.bytes.toBits(e)),pbkdf2(e,t,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const a=1+(s>>5)<<2;let o,i,c,l,h;const f=new ArrayBuffer(a),p=new u(f);let d=0;const g=I;for(t=A.bytes.toBits(t),h=1;(a||1)>d;h++){for(o=i=e.encrypt(g.concat(t,[h])),c=1;n>c;c++)for(i=e.encrypt(i),l=0;l<i.length;l++)o[l]^=i[l];for(c=0;(a||1)>d&&c<o.length;c++)p.setInt32(d,o[c]),d+=4}return f.slice(0,s/8)},hmacSha1:class{constructor(e){const t=this,n=t._hash=q,s=[[],[]];t._baseHash=[new n,new n];const r=t._baseHash[0].blockSize/32;e.length>r&&(e=(new n).update(e).finalize());for(let t=0;r>t;t++)s[0][t]=909522486^e[t],s[1][t]=1549556828^e[t];t._baseHash[0].update(s[0]),t._baseHash[1].update(s[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new r("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},P=typeof p!=S&&typeof p.getRandomValues==v,B="Invalid password",K="Invalid signature",T="zipjs-abort-check-password";function V(e){return P?p.getRandomValues(e):R.getRandomValues(e)}const x=16,E={name:"PBKDF2"},U=t.assign({hash:{name:"HMAC"}},E),W=t.assign({iterations:1e3,hash:{name:"SHA-1"}},E),M=["deriveBits"],N=[8,12,16],O=[16,24,32],L=10,F=[0,0,0,0],j=typeof p!=S,G=j&&p.subtle,X=j&&typeof G!=S,J=A.bytes,Q=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],s=t._tables[1],a=e.length;let o,i,c,l=1;if(4!==a&&6!==a&&8!==a)throw new r("invalid aes key size");for(t._key=[i=e.slice(0),c=[]],o=a;4*a+28>o;o++){let e=i[o-1];(o%a==0||8===a&&o%a==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],o%a==0&&(e=e<<8^e>>>24^l<<24,l=l<<1^283*(l>>7))),i[o]=i[o-a]^e}for(let e=0;o;e++,o--){const t=i[3&e?o:o-4];c[e]=4>=o||4>e?t:s[0][n[t>>>24]]^s[1][n[t>>16&255]]^s[2][n[t>>8&255]]^s[3][n[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],s=t[4],r=[],a=[];let o,i,c,l;for(let e=0;256>e;e++)a[(r[e]=e<<1^283*(e>>7))^e]=e;for(let u=o=0;!n[u];u^=i||1,o=a[o]||1){let a=o^o<<1^o<<2^o<<3^o<<4;a=a>>8^255&a^99,n[u]=a,s[a]=u,l=r[c=r[i=r[u]]];let h=16843009*l^65537*c^257*i^16843008*u,f=257*r[a]^16843008*a;for(let n=0;4>n;n++)e[n][u]=f=f<<24^f>>>8,t[n][a]=h=h<<24^h>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}_crypt(e,t){if(4!==e.length)throw new r("invalid aes block size");const n=this._key[t],s=n.length/4-2,a=[0,0,0,0],o=this._tables[t],i=o[0],c=o[1],l=o[2],u=o[3],h=o[4];let f,p,d,g=e[0]^n[0],w=e[t?3:1]^n[1],y=e[2]^n[2],m=e[t?1:3]^n[3],_=4;for(let e=0;s>e;e++)f=i[g>>>24]^c[w>>16&255]^l[y>>8&255]^u[255&m]^n[_],p=i[w>>>24]^c[y>>16&255]^l[m>>8&255]^u[255&g]^n[_+1],d=i[y>>>24]^c[m>>16&255]^l[g>>8&255]^u[255&w]^n[_+2],m=i[m>>>24]^c[g>>16&255]^l[w>>8&255]^u[255&y]^n[_+3],_+=4,g=f,w=p,y=d;for(let e=0;4>e;e++)a[t?3&-e:e]=h[g>>>24]<<24^h[w>>16&255]<<16^h[y>>8&255]<<8^h[255&m]^n[_++],f=g,g=w,w=y,y=m,m=f;return a}},Y=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,n=e>>8&255,s=255&e;255===t?(t=0,255===n?(n=0,255===s?s=0:++s):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=s}return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let s;if(!(s=t.length))return[];const r=I.bitLength(t);for(let r=0;s>r;r+=4){this.incCounter(n);const s=e.encrypt(n);t[r]^=s[0],t[r+1]^=s[1],t[r+2]^=s[2],t[r+3]^=s[3]}return I.clamp(t,r)}},Z=H.hmacSha1;let $=j&&X&&typeof G.importKey==v,ee=j&&X&&typeof G.deriveBits==v;class te extends g{constructor({password:e,rawPassword:n,signed:s,encryptionStrength:o,checkPasswordOnly:i}){super({start(){t.assign(this,{ready:new h((e=>this.resolveReady=e)),password:ae(e,n),signed:s,strength:o-1,pending:new a})},async transform(e,t){const n=this,{password:s,strength:o,resolveReady:c,ready:l}=n;s?(await(async(e,t,n,s)=>{const a=await re(e,t,n,ie(s,0,N[t])),o=ie(s,N[t]);if(a[0]!=o[0]||a[1]!=o[1])throw new r(B)})(n,o,s,ie(e,0,N[o]+2)),e=ie(e,N[o]+2),i?t.error(new r(T)):c()):await l;const u=new a(e.length-L-(e.length-L)%x);t.enqueue(se(n,e,u,0,L,!0))},async flush(e){const{signed:t,ctr:n,hmac:s,pending:o,ready:i}=this;if(s&&n){await i;const c=ie(o,0,o.length-L),l=ie(o,o.length-L);let u=new a;if(c.length){const e=le(J,c);s.update(e);const t=n.update(e);u=ce(J,t)}if(t){const e=ie(ce(J,s.digest()),0,L);for(let t=0;L>t;t++)if(e[t]!=l[t])throw new r(K)}e.enqueue(u)}}})}}class ne extends g{constructor({password:e,rawPassword:n,encryptionStrength:s}){let r;super({start(){t.assign(this,{ready:new h((e=>this.resolveReady=e)),password:ae(e,n),strength:s-1,pending:new a})},async transform(e,t){const n=this,{password:s,strength:r,resolveReady:o,ready:i}=n;let c=new a;s?(c=await(async(e,t,n)=>{const s=V(new a(N[t]));return oe(s,await re(e,t,n,s))})(n,r,s),o()):await i;const l=new a(c.length+e.length-e.length%x);l.set(c,0),t.enqueue(se(n,e,l,c.length,0))},async flush(e){const{ctr:t,hmac:n,pending:s,ready:o}=this;if(n&&t){await o;let i=new a;if(s.length){const e=t.update(le(J,s));n.update(e),i=ce(J,e)}r.signature=ce(J,n.digest()).slice(0,L),e.enqueue(oe(i,r.signature))}}}),r=this}}function se(e,t,n,s,r,o){const{ctr:i,hmac:c,pending:l}=e,u=t.length-r;let h;for(l.length&&(t=oe(l,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new a(t)).set(n,0)}return e})(n,u-u%x)),h=0;u-x>=h;h+=x){const e=le(J,ie(t,h,h+x));o&&c.update(e);const r=i.update(e);o||c.update(r),n.set(ce(J,r),h+s)}return e.pending=ie(t,h),n}async function re(n,s,r,o){n.password=null;const i=await(async(e,t,n,s,r)=>{if(!$)return H.importKey(t);try{return await G.importKey("raw",t,n,!1,r)}catch(e){return $=!1,H.importKey(t)}})(0,r,U,0,M),c=await(async(e,t,n)=>{if(!ee)return H.pbkdf2(t,e.salt,W.iterations,n);try{return await G.deriveBits(e,t,n)}catch(s){return ee=!1,H.pbkdf2(t,e.salt,W.iterations,n)}})(t.assign({salt:o},W),i,8*(2*O[s]+2)),l=new a(c),u=le(J,ie(l,0,O[s])),h=le(J,ie(l,O[s],2*O[s])),f=ie(l,2*O[s]);return t.assign(n,{keys:{key:u,authentication:h,passwordVerification:f},ctr:new Y(new Q(u),e.from(F)),hmac:new Z(h)}),f}function ae(e,t){return t===b?(e=>{if(typeof f==S){const t=new a((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new f).encode(e)})(e):t}function oe(e,t){let n=e;return e.length+t.length&&(n=new a(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function ie(e,t,n){return e.subarray(t,n)}function ce(e,t){return e.fromBits(t)}function le(e,t){return e.toBits(t)}class ue extends g{constructor({password:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){t.assign(this,{password:e,passwordVerification:n}),de(this,e)},transform(e,t){const n=this;if(n.password){const t=fe(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new r(B);e=e.subarray(12)}s?t.error(new r(T)):t.enqueue(fe(n,e))}})}}class he extends g{constructor({password:e,passwordVerification:n}){super({start(){t.assign(this,{password:e,passwordVerification:n}),de(this,e)},transform(e,t){const n=this;let s,r;if(n.password){n.password=null;const t=V(new a(12));t[11]=n.passwordVerification,s=new a(e.length+t.length),s.set(pe(n,t),0),r=12}else s=new a(e.length),r=0;s.set(pe(n,e),r),t.enqueue(s)}})}}function fe(e,t){const n=new a(t.length);for(let s=0;s<t.length;s++)n[s]=we(e)^t[s],ge(e,n[s]);return n}function pe(e,t){const n=new a(t.length);for(let s=0;s<t.length;s++)n[s]=we(e)^t[s],ge(e,t[s]);return n}function de(e,n){const s=[305419896,591751049,878082192];t.assign(e,{keys:s,crcKey0:new D(s[0]),crcKey2:new D(s[2])});for(let t=0;t<n.length;t++)ge(e,n.charCodeAt(t))}function ge(e,t){let[n,r,a]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),r=me(s.imul(me(r+ye(n)),134775813)+1),e.crcKey2.append([r>>>24]),a=~e.crcKey2.get(),e.keys=[n,r,a]}function we(e){const t=2|e.keys[2];return ye(s.imul(t,1^t)>>>8)}function ye(e){return 255&e}function me(e){return 4294967295&e}const _e="deflate-raw";class be extends g{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:s}){super({});const{compressed:r,encrypted:a,useCompressionStream:o,zipCrypto:i,signed:c,level:l}=e,h=this;let f,p,d=ve(super.readable);a&&!i||!c||(f=new C,d=De(d,f)),r&&(d=ze(d,o,{level:l,chunkSize:t},s,n)),a&&(i?d=De(d,new he(e)):(p=new ne(e),d=De(d,p))),ke(h,d,(()=>{let e;a&&!i&&(e=p.signature),a&&!i||!c||(e=new u(f.value.buffer).getUint32(0)),h.signature=e}))}}class Se extends g{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:s}){super({});const{zipCrypto:a,encrypted:o,signed:i,signature:c,compressed:l,useCompressionStream:h}=e;let f,p,d=ve(super.readable);o&&(a?d=De(d,new ue(e)):(p=new te(e),d=De(d,p))),l&&(d=ze(d,h,{chunkSize:t},s,n)),o&&!a||!i||(f=new C,d=De(d,f)),ke(this,d,(()=>{if((!o||a)&&i){const e=new u(f.value.buffer);if(c!=e.getUint32(0,!1))throw new r(K)}}))}}function ve(e){return De(e,new g({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ke(e,n,s){n=De(n,new g({flush:s})),t.defineProperty(e,"readable",{get:()=>n})}function ze(e,t,n,s,r){try{e=De(e,new(t&&s?s:r)(_e,n))}catch(s){if(!t)return e;try{e=De(e,new r(_e,n))}catch(t){return e}}return e}function De(e,t){return e.pipeThrough(t)}const Ce="data",Ie="close";class Ae extends g{constructor(e,n){super({});const s=this,{codecType:r}=e;let a;r.startsWith("deflate")?a=be:r.startsWith("inflate")&&(a=Se);let o=0,i=0;const c=new a(e,n),l=super.readable,u=new g({transform(e,t){e&&e.length&&(i+=e.length,t.enqueue(e))},flush(){t.assign(s,{inputSize:i})}}),h=new g({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){const{signature:e}=c;t.assign(s,{signature:e,outputSize:o,inputSize:i})}});t.defineProperty(s,"readable",{get:()=>l.pipeThrough(u).pipeThrough(c).pipeThrough(h)})}}class qe extends g{constructor(e){let t;super({transform:function n(s,r){if(t){const e=new a(t.length+s.length);e.set(t),e.set(s,t.length),s=e,t=null}s.length>e?(r.enqueue(s.slice(0,e)),n(s.slice(e),r)):t=s},flush(e){t&&t.length&&e.enqueue(t)}})}}const Re=new l,He=new l;let Pe,Be=0,Ke=!0;async function Te(e){try{const{options:t,scripts:s,config:r}=e;if(s&&s.length)try{Ke?importScripts.apply(b,s):await Ve(s)}catch(e){Ke=!1,await Ve(s)}self.initCodec&&self.initCodec(),r.CompressionStreamNative=self.CompressionStream,r.DecompressionStreamNative=self.DecompressionStream,self.Deflate&&(r.CompressionStream=new k(self.Deflate)),self.Inflate&&(r.DecompressionStream=new k(self.Inflate));const a={highWaterMark:1},o=e.readable||new w({async pull(e){const t=new h((e=>Re.set(Be,e)));xe({type:"pull",messageId:Be}),Be=(Be+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await t;e.enqueue(s),r&&e.close()}},a),i=e.writable||new y({async write(e){let t;const s=new h((e=>t=e));He.set(Be,t),xe({type:Ce,value:e,messageId:Be}),Be=(Be+1)%n.MAX_SAFE_INTEGER,await s}},a),c=new Ae(t,r);Pe=new AbortController;const{signal:l}=Pe;await o.pipeThrough(c).pipeThrough(new qe(r.chunkSize)).pipeTo(i,{signal:l,preventClose:!0,preventAbort:!0}),await i.getWriter().close();const{signature:u,inputSize:f,outputSize:p}=c;xe({type:Ie,result:{signature:u,inputSize:f,outputSize:p}})}catch(e){Ee(e)}}async function Ve(e){for(const t of e)await import(t)}function xe(e){let{value:t}=e;if(t)if(t.length)try{t=new a(t),e.value=t.buffer,d(e,[e.value])}catch(t){d(e)}else d(e);else d(e)}function Ee(e=new r("Unknown error")){const{message:t,stack:n,code:s,name:a}=e;d({error:{message:t,stack:n,code:s,name:a}})}function Ue(e,n,s){return class{constructor(r){const o=this;var i,c;i=r,c="level",(typeof t.hasOwn===v?t.hasOwn(i,c):i.hasOwnProperty(c))&&r.level===b&&delete r.level,o.codec=new e(t.assign({},n,r)),s(o.codec,(e=>{if(o.pendingData){const t=o.pendingData;o.pendingData=new a(t.length+e.length);const{pendingData:n}=o;n.set(t,0),n.set(e,t.length)}else o.pendingData=new a(e)}))}append(e){return this.codec.push(e),r(this)}flush(){return this.codec.push(new a,!0),r(this)}};function r(e){if(e.pendingData){const t=e.pendingData;return e.pendingData=null,t}return new a}}addEventListener("message",(({data:e})=>{const{type:t,messageId:n,value:s,done:r}=e;try{if("start"==t&&Te(e),t==Ce){const e=Re.get(n);Re.delete(n),e({value:new a(s),done:r})}if("ack"==t){const e=He.get(n);He.delete(n),e()}t==Ie&&Pe.abort()}catch(e){Ee(e)}})),self.initCodec=()=>{const{Deflate:e,Inflate:t}=((e,t={},n)=>({Deflate:Ue(e.Deflate,t.deflate,n),Inflate:Ue(e.Inflate,t.inflate,n)}))(pako,{deflate:{raw:!0},inflate:{raw:!0}},((e,t)=>e.onData=t));self.Deflate=e,self.Inflate=t}}();
|
|
1
|
+
!function(){"use strict";const{Array:e,Object:t,Number:n,Math:s,Error:r,Uint8Array:a,Uint16Array:o,Uint32Array:i,Int32Array:c,Map:l,DataView:u,Promise:h,TextEncoder:f,crypto:p,postMessage:d,TransformStream:g,ReadableStream:w,WritableStream:y,CompressionStream:m,DecompressionStream:_}=self,b=void 0,S="undefined",v="function";class k{constructor(e){return class extends g{constructor(t,n){const s=new e(n);super({transform(e,t){t.enqueue(s.append(e))},flush(e){const t=s.flush();t&&e.enqueue(t)}})}}}}const z=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;z[e]=t}class D{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let n=0,s=0|e.length;s>n;n++)t=t>>>8^z[255&(t^e[n])];this.crc=t}get(){return~this.crc}}class C extends g{constructor(){let e;const t=new D;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new a(4);new u(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const I={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],s=I.getPartial(n);return 32===s?e.concat(t):I._shiftRight(t,s,0|n,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+I.getPartial(n)},clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,s.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=I.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,getPartial:e=>s.round(e/1099511627776)||32,_shiftRight(e,t,n,s){for(void 0===s&&(s=[]);t>=32;t-=32)s.push(n),n=0;if(0===t)return s.concat(e);for(let r=0;r<e.length;r++)s.push(n|e[r]>>>t),n=e[r]<<32-t;const r=e.length?e[e.length-1]:0,a=I.getPartial(r);return s.push(I.partial(t+a&31,t+a>32?n:s.pop(),1)),s}},A={bytes:{fromBits(e){const t=I.bitLength(e)/8,n=new a(t);let s;for(let r=0;t>r;r++)3&r||(s=e[r/4]),n[r]=s>>>24,s<<=8;return n},toBits(e){const t=[];let n,s=0;for(n=0;n<e.length;n++)s=s<<8|e[n],3&~n||(t.push(s),s=0);return 3&n&&t.push(I.partial(8*(3&n),s)),t}}},q=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=A.utf8String.toBits(e));const n=t._buffer=I.concat(t._buffer,e),s=t._length,a=t._length=s+I.bitLength(e);if(a>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const o=new i(n);let c=0;for(let e=t.blockSize+s-(t.blockSize+s&t.blockSize-1);a>=e;e+=t.blockSize)t._block(o.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),t}finalize(){const e=this;let t=e._buffer;const n=e._h;t=I.concat(t,[I.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(s.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,s){return e>19?e>39?e>59?e>79?void 0:t^n^s:t&n|t&s|n&s:t^n^s:t&n|~t&s}_S(e,t){return t<<e|t>>>32-e}_block(t){const n=this,r=n._h,a=e(80);for(let e=0;16>e;e++)a[e]=t[e];let o=r[0],i=r[1],c=r[2],l=r[3],u=r[4];for(let e=0;79>=e;e++){16>e||(a[e]=n._S(1,a[e-3]^a[e-8]^a[e-14]^a[e-16]));const t=n._S(5,o)+n._f(e,i,c,l)+u+a[e]+n._key[s.floor(e/20)]|0;u=l,l=c,c=n._S(30,i),i=o,o=t}r[0]=r[0]+o|0,r[1]=r[1]+i|0,r[2]=r[2]+c|0,r[3]=r[3]+l|0,r[4]=r[4]+u|0}},R={getRandomValues(e){const t=new i(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(s.random()>.5?1:-1))};for(let r,a=0;a<e.length;a+=4){const e=n(4294967296*(r||s.random()));r=987654071*e(),t[a/4]=4294967296*e()|0}return e}},H={importKey:e=>new H.hmacSha1(A.bytes.toBits(e)),pbkdf2(e,t,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const a=1+(s>>5)<<2;let o,i,c,l,h;const f=new ArrayBuffer(a),p=new u(f);let d=0;const g=I;for(t=A.bytes.toBits(t),h=1;(a||1)>d;h++){for(o=i=e.encrypt(g.concat(t,[h])),c=1;n>c;c++)for(i=e.encrypt(i),l=0;l<i.length;l++)o[l]^=i[l];for(c=0;(a||1)>d&&c<o.length;c++)p.setInt32(d,o[c]),d+=4}return f.slice(0,s/8)},hmacSha1:class{constructor(e){const t=this,n=t._hash=q,s=[[],[]];t._baseHash=[new n,new n];const r=t._baseHash[0].blockSize/32;e.length>r&&(e=(new n).update(e).finalize());for(let t=0;r>t;t++)s[0][t]=909522486^e[t],s[1][t]=1549556828^e[t];t._baseHash[0].update(s[0]),t._baseHash[1].update(s[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new r("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},P=typeof p!=S&&typeof p.getRandomValues==v,B="Invalid password",K="Invalid signature",T="zipjs-abort-check-password";function V(e){return P?p.getRandomValues(e):R.getRandomValues(e)}const x=16,E={name:"PBKDF2"},U=t.assign({hash:{name:"HMAC"}},E),W=t.assign({iterations:1e3,hash:{name:"SHA-1"}},E),M=["deriveBits"],N=[8,12,16],O=[16,24,32],L=10,F=[0,0,0,0],j=typeof p!=S,G=j&&p.subtle,X=j&&typeof G!=S,J=A.bytes,Q=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],s=t._tables[1],a=e.length;let o,i,c,l=1;if(4!==a&&6!==a&&8!==a)throw new r("invalid aes key size");for(t._key=[i=e.slice(0),c=[]],o=a;4*a+28>o;o++){let e=i[o-1];(o%a===0||8===a&&o%a===4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],o%a===0&&(e=e<<8^e>>>24^l<<24,l=l<<1^283*(l>>7))),i[o]=i[o-a]^e}for(let e=0;o;e++,o--){const t=i[3&e?o:o-4];c[e]=4>=o||4>e?t:s[0][n[t>>>24]]^s[1][n[t>>16&255]]^s[2][n[t>>8&255]]^s[3][n[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],s=t[4],r=[],a=[];let o,i,c,l;for(let e=0;256>e;e++)a[(r[e]=e<<1^283*(e>>7))^e]=e;for(let u=o=0;!n[u];u^=i||1,o=a[o]||1){let a=o^o<<1^o<<2^o<<3^o<<4;a=a>>8^255&a^99,n[u]=a,s[a]=u,l=r[c=r[i=r[u]]];let h=16843009*l^65537*c^257*i^16843008*u,f=257*r[a]^16843008*a;for(let n=0;4>n;n++)e[n][u]=f=f<<24^f>>>8,t[n][a]=h=h<<24^h>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}_crypt(e,t){if(4!==e.length)throw new r("invalid aes block size");const n=this._key[t],s=n.length/4-2,a=[0,0,0,0],o=this._tables[t],i=o[0],c=o[1],l=o[2],u=o[3],h=o[4];let f,p,d,g=e[0]^n[0],w=e[t?3:1]^n[1],y=e[2]^n[2],m=e[t?1:3]^n[3],_=4;for(let e=0;s>e;e++)f=i[g>>>24]^c[w>>16&255]^l[y>>8&255]^u[255&m]^n[_],p=i[w>>>24]^c[y>>16&255]^l[m>>8&255]^u[255&g]^n[_+1],d=i[y>>>24]^c[m>>16&255]^l[g>>8&255]^u[255&w]^n[_+2],m=i[m>>>24]^c[g>>16&255]^l[w>>8&255]^u[255&y]^n[_+3],_+=4,g=f,w=p,y=d;for(let e=0;4>e;e++)a[t?3&-e:e]=h[g>>>24]<<24^h[w>>16&255]<<16^h[y>>8&255]<<8^h[255&m]^n[_++],f=g,g=w,w=y,y=m,m=f;return a}},Y=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,n=e>>8&255,s=255&e;255===t?(t=0,255===n?(n=0,255===s?s=0:++s):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=s}return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let s;if(!(s=t.length))return[];const r=I.bitLength(t);for(let r=0;s>r;r+=4){this.incCounter(n);const s=e.encrypt(n);t[r]^=s[0],t[r+1]^=s[1],t[r+2]^=s[2],t[r+3]^=s[3]}return I.clamp(t,r)}},Z=H.hmacSha1;let $=j&&X&&typeof G.importKey==v,ee=j&&X&&typeof G.deriveBits==v;class te extends g{constructor({password:e,rawPassword:n,signed:s,encryptionStrength:o,checkPasswordOnly:i}){super({start(){t.assign(this,{ready:new h((e=>this.resolveReady=e)),password:ae(e,n),signed:s,strength:o-1,pending:new a})},async transform(e,t){const n=this,{password:s,strength:o,resolveReady:c,ready:l}=n;s?(await(async(e,t,n,s)=>{const a=await re(e,t,n,ie(s,0,N[t])),o=ie(s,N[t]);if(a[0]!=o[0]||a[1]!=o[1])throw new r(B)})(n,o,s,ie(e,0,N[o]+2)),e=ie(e,N[o]+2),i?t.error(new r(T)):c()):await l;const u=new a(e.length-L-(e.length-L)%x);t.enqueue(se(n,e,u,0,L,!0))},async flush(e){const{signed:t,ctr:n,hmac:s,pending:o,ready:i}=this;if(s&&n){await i;const c=ie(o,0,o.length-L),l=ie(o,o.length-L);let u=new a;if(c.length){const e=le(J,c);s.update(e);const t=n.update(e);u=ce(J,t)}if(t){const e=ie(ce(J,s.digest()),0,L);for(let t=0;L>t;t++)if(e[t]!=l[t])throw new r(K)}e.enqueue(u)}}})}}class ne extends g{constructor({password:e,rawPassword:n,encryptionStrength:s}){let r;super({start(){t.assign(this,{ready:new h((e=>this.resolveReady=e)),password:ae(e,n),strength:s-1,pending:new a})},async transform(e,t){const n=this,{password:s,strength:r,resolveReady:o,ready:i}=n;let c=new a;s?(c=await(async(e,t,n)=>{const s=V(new a(N[t]));return oe(s,await re(e,t,n,s))})(n,r,s),o()):await i;const l=new a(c.length+e.length-e.length%x);l.set(c,0),t.enqueue(se(n,e,l,c.length,0))},async flush(e){const{ctr:t,hmac:n,pending:s,ready:o}=this;if(n&&t){await o;let i=new a;if(s.length){const e=t.update(le(J,s));n.update(e),i=ce(J,e)}r.signature=ce(J,n.digest()).slice(0,L),e.enqueue(oe(i,r.signature))}}}),r=this}}function se(e,t,n,s,r,o){const{ctr:i,hmac:c,pending:l}=e,u=t.length-r;let h;for(l.length&&(t=oe(l,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new a(t)).set(n,0)}return e})(n,u-u%x)),h=0;u-x>=h;h+=x){const e=le(J,ie(t,h,h+x));o&&c.update(e);const r=i.update(e);o||c.update(r),n.set(ce(J,r),h+s)}return e.pending=ie(t,h),n}async function re(n,s,r,o){n.password=null;const i=await(async(e,t,n,s,r)=>{if(!$)return H.importKey(t);try{return await G.importKey("raw",t,n,!1,r)}catch(e){return $=!1,H.importKey(t)}})(0,r,U,0,M),c=await(async(e,t,n)=>{if(!ee)return H.pbkdf2(t,e.salt,W.iterations,n);try{return await G.deriveBits(e,t,n)}catch(s){return ee=!1,H.pbkdf2(t,e.salt,W.iterations,n)}})(t.assign({salt:o},W),i,8*(2*O[s]+2)),l=new a(c),u=le(J,ie(l,0,O[s])),h=le(J,ie(l,O[s],2*O[s])),f=ie(l,2*O[s]);return t.assign(n,{keys:{key:u,authentication:h,passwordVerification:f},ctr:new Y(new Q(u),e.from(F)),hmac:new Z(h)}),f}function ae(e,t){return t===b?(e=>{if(typeof f==S){const t=new a((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new f).encode(e)})(e):t}function oe(e,t){let n=e;return e.length+t.length&&(n=new a(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function ie(e,t,n){return e.subarray(t,n)}function ce(e,t){return e.fromBits(t)}function le(e,t){return e.toBits(t)}class ue extends g{constructor({password:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){t.assign(this,{password:e,passwordVerification:n}),de(this,e)},transform(e,t){const n=this;if(n.password){const t=fe(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new r(B);e=e.subarray(12)}s?t.error(new r(T)):t.enqueue(fe(n,e))}})}}class he extends g{constructor({password:e,passwordVerification:n}){super({start(){t.assign(this,{password:e,passwordVerification:n}),de(this,e)},transform(e,t){const n=this;let s,r;if(n.password){n.password=null;const t=V(new a(12));t[11]=n.passwordVerification,s=new a(e.length+t.length),s.set(pe(n,t),0),r=12}else s=new a(e.length),r=0;s.set(pe(n,e),r),t.enqueue(s)}})}}function fe(e,t){const n=new a(t.length);for(let s=0;s<t.length;s++)n[s]=we(e)^t[s],ge(e,n[s]);return n}function pe(e,t){const n=new a(t.length);for(let s=0;s<t.length;s++)n[s]=we(e)^t[s],ge(e,t[s]);return n}function de(e,n){const s=[305419896,591751049,878082192];t.assign(e,{keys:s,crcKey0:new D(s[0]),crcKey2:new D(s[2])});for(let t=0;t<n.length;t++)ge(e,n.charCodeAt(t))}function ge(e,t){let[n,r,a]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),r=me(s.imul(me(r+ye(n)),134775813)+1),e.crcKey2.append([r>>>24]),a=~e.crcKey2.get(),e.keys=[n,r,a]}function we(e){const t=2|e.keys[2];return ye(s.imul(t,1^t)>>>8)}function ye(e){return 255&e}function me(e){return 4294967295&e}const _e="deflate-raw";class be extends g{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:s}){super({});const{compressed:r,encrypted:a,useCompressionStream:o,zipCrypto:i,signed:c,level:l}=e,h=this;let f,p,d=ve(super.readable);a&&!i||!c||(f=new C,d=De(d,f)),r&&(d=ze(d,o,{level:l,chunkSize:t},s,n)),a&&(i?d=De(d,new he(e)):(p=new ne(e),d=De(d,p))),ke(h,d,(()=>{let e;a&&!i&&(e=p.signature),a&&!i||!c||(e=new u(f.value.buffer).getUint32(0)),h.signature=e}))}}class Se extends g{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:s}){super({});const{zipCrypto:a,encrypted:o,signed:i,signature:c,compressed:l,useCompressionStream:h}=e;let f,p,d=ve(super.readable);o&&(a?d=De(d,new ue(e)):(p=new te(e),d=De(d,p))),l&&(d=ze(d,h,{chunkSize:t},s,n)),o&&!a||!i||(f=new C,d=De(d,f)),ke(this,d,(()=>{if((!o||a)&&i){const e=new u(f.value.buffer);if(c!=e.getUint32(0,!1))throw new r(K)}}))}}function ve(e){return De(e,new g({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ke(e,n,s){n=De(n,new g({flush:s})),t.defineProperty(e,"readable",{get:()=>n})}function ze(e,t,n,s,r){try{e=De(e,new(t&&s?s:r)(_e,n))}catch(s){if(!t)return e;try{e=De(e,new r(_e,n))}catch(t){return e}}return e}function De(e,t){return e.pipeThrough(t)}const Ce="data",Ie="close";class Ae extends g{constructor(e,n){super({});const s=this,{codecType:r}=e;let a;r.startsWith("deflate")?a=be:r.startsWith("inflate")&&(a=Se);let o=0,i=0;const c=new a(e,n),l=super.readable,u=new g({transform(e,t){e&&e.length&&(i+=e.length,t.enqueue(e))},flush(){t.assign(s,{inputSize:i})}}),h=new g({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){const{signature:e}=c;t.assign(s,{signature:e,outputSize:o,inputSize:i})}});t.defineProperty(s,"readable",{get:()=>l.pipeThrough(u).pipeThrough(c).pipeThrough(h)})}}class qe extends g{constructor(e){let t;super({transform:function n(s,r){if(t){const e=new a(t.length+s.length);e.set(t),e.set(s,t.length),s=e,t=null}s.length>e?(r.enqueue(s.slice(0,e)),n(s.slice(e),r)):t=s},flush(e){t&&t.length&&e.enqueue(t)}})}}const Re=new l,He=new l;let Pe,Be=0,Ke=!0;async function Te(e){try{const{options:t,scripts:s,config:r}=e;if(s&&s.length)try{Ke?importScripts.apply(b,s):await Ve(s)}catch(e){Ke=!1,await Ve(s)}self.initCodec&&self.initCodec(),r.CompressionStreamNative=self.CompressionStream,r.DecompressionStreamNative=self.DecompressionStream,self.Deflate&&(r.CompressionStream=new k(self.Deflate)),self.Inflate&&(r.DecompressionStream=new k(self.Inflate));const a={highWaterMark:1},o=e.readable||new w({async pull(e){const t=new h((e=>Re.set(Be,e)));xe({type:"pull",messageId:Be}),Be=(Be+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await t;e.enqueue(s),r&&e.close()}},a),i=e.writable||new y({async write(e){let t;const s=new h((e=>t=e));He.set(Be,t),xe({type:Ce,value:e,messageId:Be}),Be=(Be+1)%n.MAX_SAFE_INTEGER,await s}},a),c=new Ae(t,r);Pe=new AbortController;const{signal:l}=Pe;await o.pipeThrough(c).pipeThrough(new qe(r.chunkSize)).pipeTo(i,{signal:l,preventClose:!0,preventAbort:!0}),await i.getWriter().close();const{signature:u,inputSize:f,outputSize:p}=c;xe({type:Ie,result:{signature:u,inputSize:f,outputSize:p}})}catch(e){Ee(e)}}async function Ve(e){for(const t of e)await import(t)}function xe(e){let{value:t}=e;if(t)if(t.length)try{t=new a(t),e.value=t.buffer,d(e,[e.value])}catch(t){d(e)}else d(e);else d(e)}function Ee(e=new r("Unknown error")){const{message:t,stack:n,code:s,name:a}=e;d({error:{message:t,stack:n,code:s,name:a}})}function Ue(e,n,s){return class{constructor(r){const o=this;var i,c;i=r,c="level",(typeof t.hasOwn===v?t.hasOwn(i,c):i.hasOwnProperty(c))&&r.level===b&&delete r.level,o.codec=new e(t.assign({},n,r)),s(o.codec,(e=>{if(o.pendingData){const t=o.pendingData;o.pendingData=new a(t.length+e.length);const{pendingData:n}=o;n.set(t,0),n.set(e,t.length)}else o.pendingData=new a(e)}))}append(e){return this.codec.push(e),r(this)}flush(){return this.codec.push(new a,!0),r(this)}};function r(e){if(e.pendingData){const t=e.pendingData;return e.pendingData=null,t}return new a}}addEventListener("message",(({data:e})=>{const{type:t,messageId:n,value:s,done:r}=e;try{if("start"==t&&Te(e),t==Ce){const e=Re.get(n);Re.delete(n),e({value:new a(s),done:r})}if("ack"==t){const e=He.get(n);He.delete(n),e()}t==Ie&&Pe.abort()}catch(e){Ee(e)}})),self.initCodec=()=>{const{Deflate:e,Inflate:t}=((e,t={},n)=>({Deflate:Ue(e.Deflate,t.deflate,n),Inflate:Ue(e.Inflate,t.inflate,n)}))(pako,{deflate:{raw:!0},inflate:{raw:!0}},((e,t)=>e.onData=t));self.Deflate=e,self.Inflate=t}}();
|
package/index.d.ts
CHANGED
|
@@ -3023,7 +3023,10 @@ export const Check: {
|
|
|
3023
3023
|
* @param {*} test The value to test
|
|
3024
3024
|
* @exception {DeveloperError} test must be typeof 'object'
|
|
3025
3025
|
*/
|
|
3026
|
-
object(
|
|
3026
|
+
object(
|
|
3027
|
+
name: string,
|
|
3028
|
+
test: any,
|
|
3029
|
+
): asserts test is Record<string | number | symbol, any>;
|
|
3027
3030
|
/**
|
|
3028
3031
|
* Throws if test is not typeof 'boolean'
|
|
3029
3032
|
*
|
|
@@ -13134,8 +13137,9 @@ export class PolygonGeometry {
|
|
|
13134
13137
|
* @param array - The packed array.
|
|
13135
13138
|
* @param [startingIndex = 0] - The starting index of the element to be unpacked.
|
|
13136
13139
|
* @param [result] - The object into which to store the result.
|
|
13140
|
+
* @returns The modified result parameter or a new PolygonGeometry instance if one was not provided.
|
|
13137
13141
|
*/
|
|
13138
|
-
static unpack(array: number[], startingIndex?: number, result?: PolygonGeometry):
|
|
13142
|
+
static unpack(array: number[], startingIndex?: number, result?: PolygonGeometry): PolygonGeometry;
|
|
13139
13143
|
/**
|
|
13140
13144
|
* Computes a rectangle which encloses the polygon defined by the list of positions, including cases over the international date line and the poles.
|
|
13141
13145
|
* @param positions - A linear ring defining the outer boundary of the polygon.
|
|
@@ -14627,7 +14631,7 @@ export class RectangleOutlineGeometry {
|
|
|
14627
14631
|
* @param array - The packed array.
|
|
14628
14632
|
* @param [startingIndex = 0] - The starting index of the element to be unpacked.
|
|
14629
14633
|
* @param [result] - The object into which to store the result.
|
|
14630
|
-
* @returns The modified result parameter or a new
|
|
14634
|
+
* @returns The modified result parameter or a new RectangleOutlineGeometry instance if one was not provided.
|
|
14631
14635
|
*/
|
|
14632
14636
|
static unpack(array: number[], startingIndex?: number, result?: RectangleOutlineGeometry): RectangleOutlineGeometry;
|
|
14633
14637
|
/**
|
|
@@ -29346,6 +29350,7 @@ export namespace Cesium3DTileset {
|
|
|
29346
29350
|
* @property [enableCollision = false] - When <code>true</code>, enables collisions for camera or CPU picking. While this is <code>true</code> the camera will be prevented from going below the tileset surface if {@link ScreenSpaceCameraController#enableCollisionDetection} is true.
|
|
29347
29351
|
* @property [projectTo2D = false] - Whether to accurately project the tileset to 2D. If this is true, the tileset will be projected accurately to 2D, but it will use more memory to do so. If this is false, the tileset will use less memory and will still render in 2D / CV mode, but its projected positions may be inaccurate. This cannot be set after the tileset has been created.
|
|
29348
29352
|
* @property [enablePick = false] - Whether to allow collision and CPU picking with <code>pick</code> when using WebGL 1. If using WebGL 2 or above, this option will be ignored. If using WebGL 1 and this is true, the <code>pick</code> operation will work correctly, but it will use more memory to do so. If running with WebGL 1 and this is false, the model will use less memory, but <code>pick</code> will always return <code>undefined</code>. This cannot be set after the tileset has loaded.
|
|
29353
|
+
* @property [asynchronouslyLoadImagery = false] - Whether loading imagery that is draped over the tileset should be done asynchronously. If this is <code>true</code>, then tile content will be displayed with its original texture until the imagery texture is loaded. If this is <code>false</code>, then the tile content will not be displayed until the imagery is ready.
|
|
29349
29354
|
* @property [debugHeatmapTilePropertyName] - The tile variable to colorize as a heatmap. All rendered tiles will be colorized relative to each other's specified variable value.
|
|
29350
29355
|
* @property [debugFreezeFrame = false] - For debugging only. Determines if only the tiles from last frame should be used for rendering.
|
|
29351
29356
|
* @property [debugColorizeTiles = false] - For debugging only. When true, assigns a random color to each tile.
|
|
@@ -29411,6 +29416,7 @@ export namespace Cesium3DTileset {
|
|
|
29411
29416
|
enableCollision?: boolean;
|
|
29412
29417
|
projectTo2D?: boolean;
|
|
29413
29418
|
enablePick?: boolean;
|
|
29419
|
+
asynchronouslyLoadImagery?: boolean;
|
|
29414
29420
|
debugHeatmapTilePropertyName?: string;
|
|
29415
29421
|
debugFreezeFrame?: boolean;
|
|
29416
29422
|
debugColorizeTiles?: boolean;
|
|
@@ -29916,6 +29922,20 @@ export class Cesium3DTileset {
|
|
|
29916
29922
|
* The {@link ClippingPolygonCollection} used to selectively disable rendering the tileset.
|
|
29917
29923
|
*/
|
|
29918
29924
|
clippingPolygons: ClippingPolygonCollection;
|
|
29925
|
+
/**
|
|
29926
|
+
* The collection of <code>ImageryLayer</code> objects providing 2D georeferenced
|
|
29927
|
+
* image data that will be rendered over the tileset.
|
|
29928
|
+
*
|
|
29929
|
+
* The imagery will be draped over glTF, B3DM, PNTS, or GeoJSON tile content.
|
|
29930
|
+
* @example
|
|
29931
|
+
* // Drape Bing Maps Aerial imagery over the tileset
|
|
29932
|
+
* const imageryProvider = await Cesium.createWorldImageryAsync({
|
|
29933
|
+
* style: Cesium.IonWorldImageryStyle.AERIAL,
|
|
29934
|
+
* });
|
|
29935
|
+
* const imageryLayer = new ImageryLayer(imageryProvider);
|
|
29936
|
+
* tileset.imageryLayers.add(imageryLayer);
|
|
29937
|
+
*/
|
|
29938
|
+
readonly imageryLayers: ImageryLayerCollection;
|
|
29919
29939
|
/**
|
|
29920
29940
|
* Gets the tileset's properties dictionary object, which contains metadata about per-feature properties.
|
|
29921
29941
|
* <p>
|
|
@@ -34223,7 +34243,7 @@ export namespace ImageryLayer {
|
|
|
34223
34243
|
* <code>function(frameState, layer, x, y, level)</code>. The function is passed the
|
|
34224
34244
|
* current frame state, this layer, and the x, y, and level coordinates
|
|
34225
34245
|
* of the imagery tile for which the hue is required, and it is expected to return
|
|
34226
|
-
* the
|
|
34246
|
+
* the hue value to use for the tile. The function is executed for every
|
|
34227
34247
|
* frame and for every tile, so it must be fast.
|
|
34228
34248
|
* @property [saturation = 1.0] - The saturation of this layer. 1.0 uses the unmodified imagery color.
|
|
34229
34249
|
* Less than 1.0 reduces the saturation while greater than 1.0 increases it.
|
|
@@ -34231,7 +34251,7 @@ export namespace ImageryLayer {
|
|
|
34231
34251
|
* <code>function(frameState, layer, x, y, level)</code>. The function is passed the
|
|
34232
34252
|
* current frame state, this layer, and the x, y, and level coordinates
|
|
34233
34253
|
* of the imagery tile for which the saturation is required, and it is expected to return
|
|
34234
|
-
* the
|
|
34254
|
+
* the saturation value to use for the tile. The function is executed for every
|
|
34235
34255
|
* frame and for every tile, so it must be fast.
|
|
34236
34256
|
* @property [gamma = 1.0] - The gamma correction to apply to this layer. 1.0 uses the unmodified imagery color.
|
|
34237
34257
|
* This can either be a simple number or a function with the signature
|
|
@@ -34292,7 +34312,7 @@ export namespace ImageryLayer {
|
|
|
34292
34312
|
|
|
34293
34313
|
/**
|
|
34294
34314
|
* An imagery layer that displays tiled image data from a single imagery provider
|
|
34295
|
-
* on a {@link Globe}.
|
|
34315
|
+
* on a {@link Globe} or {@link Cesium3DTileset}.
|
|
34296
34316
|
* @example
|
|
34297
34317
|
* // Add an OpenStreetMaps layer
|
|
34298
34318
|
* const imageryLayer = new Cesium.ImageryLayer(new Cesium.OpenStreetMapImageryProvider({
|
|
@@ -34308,6 +34328,18 @@ export namespace ImageryLayer {
|
|
|
34308
34328
|
* const imageryLayer = Cesium.ImageryLayer.fromProviderAsync(Cesium.IonImageryProvider.fromAssetId(3812));
|
|
34309
34329
|
* imageryLayer.alpha = 0.5;
|
|
34310
34330
|
* scene.imageryLayers.add(imageryLayer);
|
|
34331
|
+
* @example
|
|
34332
|
+
* // Drape Bing Maps Aerial imagery over a 3D tileset
|
|
34333
|
+
* const tileset = await Cesium.Cesium3DTileset.fromUrl(
|
|
34334
|
+
* "http://localhost:8002/tilesets/Seattle/tileset.json"
|
|
34335
|
+
* );
|
|
34336
|
+
* scene.primitives.add(tileset);
|
|
34337
|
+
*
|
|
34338
|
+
* const imageryProvider = await Cesium.createWorldImageryAsync({
|
|
34339
|
+
* style: Cesium.IonWorldImageryStyle.AERIAL,
|
|
34340
|
+
* });
|
|
34341
|
+
* const imageryLayer = new ImageryLayer(imageryProvider);
|
|
34342
|
+
* tileset.imageryLayers.add(imageryLayer);
|
|
34311
34343
|
* @param [imageryProvider] - The imagery provider to use.
|
|
34312
34344
|
* @param [options] - An object describing initialization options
|
|
34313
34345
|
*/
|
|
@@ -34557,7 +34589,7 @@ export class ImageryLayer {
|
|
|
34557
34589
|
}
|
|
34558
34590
|
|
|
34559
34591
|
/**
|
|
34560
|
-
* An ordered collection of imagery layers.
|
|
34592
|
+
* An ordered collection of imagery layers for rendering raster imagery on a {@link Globe} or {@link Cesium3DTileset}.
|
|
34561
34593
|
*/
|
|
34562
34594
|
export class ImageryLayerCollection {
|
|
34563
34595
|
constructor();
|
|
@@ -38411,6 +38443,26 @@ export class ModelNode {
|
|
|
38411
38443
|
originalMatrix: Matrix4;
|
|
38412
38444
|
}
|
|
38413
38445
|
|
|
38446
|
+
/**
|
|
38447
|
+
* Reads and returns a value with the given type
|
|
38448
|
+
* at the given byte offset from the data view, in little-endian
|
|
38449
|
+
* order
|
|
38450
|
+
* @param dataView - Typed data view into a binary buffer
|
|
38451
|
+
* @param byteOffset - The offset, in bytes, from the start of the view to read the data from
|
|
38452
|
+
* @param numberOfComponents - The number of components to read
|
|
38453
|
+
* @param result - The array in which to read the result
|
|
38454
|
+
*/
|
|
38455
|
+
export type ComponentsReaderCallback = (dataView: DataView, byteOffset: number, numberOfComponents: number, result: number[]) => void;
|
|
38456
|
+
|
|
38457
|
+
/**
|
|
38458
|
+
* Reads and returns a value with the given type
|
|
38459
|
+
* at the given byte offset from the data view, in little-endian
|
|
38460
|
+
* order
|
|
38461
|
+
* @param dataView - Typed data view into a binary buffer
|
|
38462
|
+
* @param byteOffset - The offset, in bytes, from the start of the view to read the data from
|
|
38463
|
+
*/
|
|
38464
|
+
export type ComponentReaderCallback = (dataView: DataView, byteOffset: number) => number | bigint;
|
|
38465
|
+
|
|
38414
38466
|
/**
|
|
38415
38467
|
* A simple struct that serves as a value of a <code>sampler2D</code>-valued
|
|
38416
38468
|
* uniform. This is used with {@link CustomShader} and {@link TextureManager}
|