{"version":3,"file":"createVerticesFromQuantizedTerrainMesh.js","sources":["../../../../Source/Core/TerrainProvider.js","../../../../Source/WorkersES6/createVerticesFromQuantizedTerrainMesh.js"],"sourcesContent":["import defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport CesiumMath from \"./Math.js\";\n\n/**\n * Provides terrain or other geometry for the surface of an ellipsoid. The surface geometry is\n * organized into a pyramid of tiles according to a {@link TilingScheme}. This type describes an\n * interface and is not intended to be instantiated directly.\n *\n * @alias TerrainProvider\n * @constructor\n *\n * @see EllipsoidTerrainProvider\n * @see CesiumTerrainProvider\n * @see VRTheWorldTerrainProvider\n * @see GoogleEarthEnterpriseTerrainProvider\n */\nfunction TerrainProvider() {\n DeveloperError.throwInstantiationError();\n}\n\nObject.defineProperties(TerrainProvider.prototype, {\n /**\n * Gets an event that is raised when the terrain provider encounters an asynchronous error.. By subscribing\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\n * are passed an instance of {@link TileProviderError}.\n * @memberof TerrainProvider.prototype\n * @type {Event}\n * @readonly\n */\n errorEvent: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\n * the source of the terrain. This function should\n * not be called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {Credit}\n * @readonly\n */\n credit: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets the tiling scheme used by the provider. This function should\n * not be called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {TilingScheme}\n * @readonly\n */\n tilingScheme: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the provider is ready for use.\n * @memberof TerrainProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n ready: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a promise that resolves to true when the provider is ready for use.\n * @memberof TerrainProvider.prototype\n * @type {Promise.}\n * @readonly\n */\n readyPromise: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\n * indicates which areas of the globe are water rather than land, so they can be rendered\n * as a reflective surface with animated waves. This function should not be\n * called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasWaterMask: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets a value indicating whether or not the requested tiles include vertex normals.\n * This function should not be called before {@link TerrainProvider#ready} returns true.\n * @memberof TerrainProvider.prototype\n * @type {Boolean}\n * @readonly\n */\n hasVertexNormals: {\n get: DeveloperError.throwInstantiationError,\n },\n\n /**\n * Gets an object that can be used to determine availability of terrain from this provider, such as\n * at points and in rectangles. This function should not be called before\n * {@link TerrainProvider#ready} returns true. This property may be undefined if availability\n * information is not available.\n * @memberof TerrainProvider.prototype\n * @type {TileAvailability}\n * @readonly\n */\n availability: {\n get: DeveloperError.throwInstantiationError,\n },\n});\n\nconst regularGridIndicesCache = [];\n\n/**\n * Gets a list of indices for a triangle mesh representing a regular grid. Calling\n * this function multiple times with the same grid width and height returns the\n * same list of indices. The total number of vertices must be less than or equal\n * to 65536.\n *\n * @param {Number} width The number of vertices in the regular grid in the horizontal direction.\n * @param {Number} height The number of vertices in the regular grid in the vertical direction.\n * @returns {Uint16Array|Uint32Array} The list of indices. Uint16Array gets returned for 64KB or less and Uint32Array for 4GB or less.\n */\nTerrainProvider.getRegularGridIndices = function (width, height) {\n //>>includeStart('debug', pragmas.debug);\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n throw new DeveloperError(\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\n );\n }\n //>>includeEnd('debug');\n\n let byWidth = regularGridIndicesCache[width];\n if (!defined(byWidth)) {\n regularGridIndicesCache[width] = byWidth = [];\n }\n\n let indices = byWidth[height];\n if (!defined(indices)) {\n if (width * height < CesiumMath.SIXTY_FOUR_KILOBYTES) {\n indices = byWidth[height] = new Uint16Array(\n (width - 1) * (height - 1) * 6\n );\n } else {\n indices = byWidth[height] = new Uint32Array(\n (width - 1) * (height - 1) * 6\n );\n }\n addRegularGridIndices(width, height, indices, 0);\n }\n\n return indices;\n};\n\nconst regularGridAndEdgeIndicesCache = [];\n\n/**\n * @private\n */\nTerrainProvider.getRegularGridIndicesAndEdgeIndices = function (width, height) {\n //>>includeStart('debug', pragmas.debug);\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n throw new DeveloperError(\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\n );\n }\n //>>includeEnd('debug');\n\n let byWidth = regularGridAndEdgeIndicesCache[width];\n if (!defined(byWidth)) {\n regularGridAndEdgeIndicesCache[width] = byWidth = [];\n }\n\n let indicesAndEdges = byWidth[height];\n if (!defined(indicesAndEdges)) {\n const indices = TerrainProvider.getRegularGridIndices(width, height);\n\n const edgeIndices = getEdgeIndices(width, height);\n const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\n const southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\n const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\n const northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\n\n indicesAndEdges = byWidth[height] = {\n indices: indices,\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n };\n }\n\n return indicesAndEdges;\n};\n\nconst regularGridAndSkirtAndEdgeIndicesCache = [];\n\n/**\n * @private\n */\nTerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices = function (\n width,\n height\n) {\n //>>includeStart('debug', pragmas.debug);\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\n throw new DeveloperError(\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\n );\n }\n //>>includeEnd('debug');\n\n let byWidth = regularGridAndSkirtAndEdgeIndicesCache[width];\n if (!defined(byWidth)) {\n regularGridAndSkirtAndEdgeIndicesCache[width] = byWidth = [];\n }\n\n let indicesAndEdges = byWidth[height];\n if (!defined(indicesAndEdges)) {\n const gridVertexCount = width * height;\n const gridIndexCount = (width - 1) * (height - 1) * 6;\n const edgeVertexCount = width * 2 + height * 2;\n const edgeIndexCount = Math.max(0, edgeVertexCount - 4) * 6;\n const vertexCount = gridVertexCount + edgeVertexCount;\n const indexCount = gridIndexCount + edgeIndexCount;\n\n const edgeIndices = getEdgeIndices(width, height);\n const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\n const southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\n const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\n const northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\n\n const indices = IndexDatatype.createTypedArray(vertexCount, indexCount);\n addRegularGridIndices(width, height, indices, 0);\n TerrainProvider.addSkirtIndices(\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast,\n gridVertexCount,\n indices,\n gridIndexCount\n );\n\n indicesAndEdges = byWidth[height] = {\n indices: indices,\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n indexCountWithoutSkirts: gridIndexCount,\n };\n }\n\n return indicesAndEdges;\n};\n\n/**\n * @private\n */\nTerrainProvider.addSkirtIndices = function (\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast,\n vertexCount,\n indices,\n offset\n) {\n let vertexIndex = vertexCount;\n offset = addSkirtIndices(\n westIndicesSouthToNorth,\n vertexIndex,\n indices,\n offset\n );\n vertexIndex += westIndicesSouthToNorth.length;\n offset = addSkirtIndices(\n southIndicesEastToWest,\n vertexIndex,\n indices,\n offset\n );\n vertexIndex += southIndicesEastToWest.length;\n offset = addSkirtIndices(\n eastIndicesNorthToSouth,\n vertexIndex,\n indices,\n offset\n );\n vertexIndex += eastIndicesNorthToSouth.length;\n addSkirtIndices(northIndicesWestToEast, vertexIndex, indices, offset);\n};\n\nfunction getEdgeIndices(width, height) {\n const westIndicesSouthToNorth = new Array(height);\n const southIndicesEastToWest = new Array(width);\n const eastIndicesNorthToSouth = new Array(height);\n const northIndicesWestToEast = new Array(width);\n\n let i;\n for (i = 0; i < width; ++i) {\n northIndicesWestToEast[i] = i;\n southIndicesEastToWest[i] = width * height - 1 - i;\n }\n\n for (i = 0; i < height; ++i) {\n eastIndicesNorthToSouth[i] = (i + 1) * width - 1;\n westIndicesSouthToNorth[i] = (height - i - 1) * width;\n }\n\n return {\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n };\n}\n\nfunction addRegularGridIndices(width, height, indices, offset) {\n let index = 0;\n for (let j = 0; j < height - 1; ++j) {\n for (let i = 0; i < width - 1; ++i) {\n const upperLeft = index;\n const lowerLeft = upperLeft + width;\n const lowerRight = lowerLeft + 1;\n const upperRight = upperLeft + 1;\n\n indices[offset++] = upperLeft;\n indices[offset++] = lowerLeft;\n indices[offset++] = upperRight;\n indices[offset++] = upperRight;\n indices[offset++] = lowerLeft;\n indices[offset++] = lowerRight;\n\n ++index;\n }\n ++index;\n }\n}\n\nfunction addSkirtIndices(edgeIndices, vertexIndex, indices, offset) {\n let previousIndex = edgeIndices[0];\n\n const length = edgeIndices.length;\n for (let i = 1; i < length; ++i) {\n const index = edgeIndices[i];\n\n indices[offset++] = previousIndex;\n indices[offset++] = index;\n indices[offset++] = vertexIndex;\n\n indices[offset++] = vertexIndex;\n indices[offset++] = index;\n indices[offset++] = vertexIndex + 1;\n\n previousIndex = index;\n ++vertexIndex;\n }\n\n return offset;\n}\n\n/**\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\n * ensure that adjacent heightmap vertices are separated by no more than\n * {@link Globe.maximumScreenSpaceError} screen pixels and will probably go very slowly.\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\n * @type {Number}\n */\nTerrainProvider.heightmapTerrainQuality = 0.25;\n\n/**\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\n *\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\n * @returns {Number} An estimated geometric error.\n */\nTerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap = function (\n ellipsoid,\n tileImageWidth,\n numberOfTilesAtLevelZero\n) {\n return (\n (ellipsoid.maximumRadius *\n 2 *\n Math.PI *\n TerrainProvider.heightmapTerrainQuality) /\n (tileImageWidth * numberOfTilesAtLevelZero)\n );\n};\n\n/**\n * Requests the geometry for a given tile. This function should not be called before\n * {@link TerrainProvider#ready} returns true. The result must include terrain data and\n * may optionally include a water mask and an indication of which child tiles are available.\n * @function\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @param {Request} [request] The request object. Intended for internal use only.\n *\n * @returns {Promise.|undefined} A promise for the requested geometry. If this method\n * returns undefined instead of a promise, it is an indication that too many requests are already\n * pending and the request will be retried later.\n */\nTerrainProvider.prototype.requestTileGeometry =\n DeveloperError.throwInstantiationError;\n\n/**\n * Gets the maximum geometric error allowed in a tile at a given level. This function should not be\n * called before {@link TerrainProvider#ready} returns true.\n * @function\n *\n * @param {Number} level The tile level for which to get the maximum geometric error.\n * @returns {Number} The maximum geometric error.\n */\nTerrainProvider.prototype.getLevelMaximumGeometricError =\n DeveloperError.throwInstantiationError;\n\n/**\n * Determines whether data for a tile is available to be loaded.\n * @function\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {Boolean|undefined} Undefined if not supported by the terrain provider, otherwise true or false.\n */\nTerrainProvider.prototype.getTileDataAvailable =\n DeveloperError.throwInstantiationError;\n\n/**\n * Makes sure we load availability data for a tile\n * @function\n *\n * @param {Number} x The X coordinate of the tile for which to request geometry.\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\n * @param {Number} level The level of the tile for which to request geometry.\n * @returns {undefined|Promise} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\n */\nTerrainProvider.prototype.loadTileDataAvailability =\n DeveloperError.throwInstantiationError;\nexport default TerrainProvider;\n","import AxisAlignedBoundingBox from \"../Core/AxisAlignedBoundingBox.js\";\nimport Cartesian2 from \"../Core/Cartesian2.js\";\nimport Cartesian3 from \"../Core/Cartesian3.js\";\nimport Cartographic from \"../Core/Cartographic.js\";\nimport defined from \"../Core/defined.js\";\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\nimport CesiumMath from \"../Core/Math.js\";\nimport Matrix4 from \"../Core/Matrix4.js\";\nimport Rectangle from \"../Core/Rectangle.js\";\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\nimport TerrainProvider from \"../Core/TerrainProvider.js\";\nimport Transforms from \"../Core/Transforms.js\";\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\n\nconst maxShort = 32767;\n\nconst cartesian3Scratch = new Cartesian3();\nconst scratchMinimum = new Cartesian3();\nconst scratchMaximum = new Cartesian3();\nconst cartographicScratch = new Cartographic();\nconst toPack = new Cartesian2();\n\nfunction createVerticesFromQuantizedTerrainMesh(\n parameters,\n transferableObjects\n) {\n const quantizedVertices = parameters.quantizedVertices;\n const quantizedVertexCount = quantizedVertices.length / 3;\n const octEncodedNormals = parameters.octEncodedNormals;\n const edgeVertexCount =\n parameters.westIndices.length +\n parameters.eastIndices.length +\n parameters.southIndices.length +\n parameters.northIndices.length;\n const includeWebMercatorT = parameters.includeWebMercatorT;\n\n const exaggeration = parameters.exaggeration;\n const exaggerationRelativeHeight = parameters.exaggerationRelativeHeight;\n const hasExaggeration = exaggeration !== 1.0;\n const includeGeodeticSurfaceNormals = hasExaggeration;\n\n const rectangle = Rectangle.clone(parameters.rectangle);\n const west = rectangle.west;\n const south = rectangle.south;\n const east = rectangle.east;\n const north = rectangle.north;\n\n const ellipsoid = Ellipsoid.clone(parameters.ellipsoid);\n\n const minimumHeight = parameters.minimumHeight;\n const maximumHeight = parameters.maximumHeight;\n\n const center = parameters.relativeToCenter;\n const fromENU = Transforms.eastNorthUpToFixedFrame(center, ellipsoid);\n const toENU = Matrix4.inverseTransformation(fromENU, new Matrix4());\n\n let southMercatorY;\n let oneOverMercatorHeight;\n if (includeWebMercatorT) {\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n south\n );\n oneOverMercatorHeight =\n 1.0 /\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(north) -\n southMercatorY);\n }\n\n const uBuffer = quantizedVertices.subarray(0, quantizedVertexCount);\n const vBuffer = quantizedVertices.subarray(\n quantizedVertexCount,\n 2 * quantizedVertexCount\n );\n const heightBuffer = quantizedVertices.subarray(\n quantizedVertexCount * 2,\n 3 * quantizedVertexCount\n );\n const hasVertexNormals = defined(octEncodedNormals);\n\n const uvs = new Array(quantizedVertexCount);\n const heights = new Array(quantizedVertexCount);\n const positions = new Array(quantizedVertexCount);\n const webMercatorTs = includeWebMercatorT\n ? new Array(quantizedVertexCount)\n : [];\n const geodeticSurfaceNormals = includeGeodeticSurfaceNormals\n ? new Array(quantizedVertexCount)\n : [];\n\n const minimum = scratchMinimum;\n minimum.x = Number.POSITIVE_INFINITY;\n minimum.y = Number.POSITIVE_INFINITY;\n minimum.z = Number.POSITIVE_INFINITY;\n\n const maximum = scratchMaximum;\n maximum.x = Number.NEGATIVE_INFINITY;\n maximum.y = Number.NEGATIVE_INFINITY;\n maximum.z = Number.NEGATIVE_INFINITY;\n\n let minLongitude = Number.POSITIVE_INFINITY;\n let maxLongitude = Number.NEGATIVE_INFINITY;\n let minLatitude = Number.POSITIVE_INFINITY;\n let maxLatitude = Number.NEGATIVE_INFINITY;\n\n for (let i = 0; i < quantizedVertexCount; ++i) {\n const rawU = uBuffer[i];\n const rawV = vBuffer[i];\n\n const u = rawU / maxShort;\n const v = rawV / maxShort;\n const height = CesiumMath.lerp(\n minimumHeight,\n maximumHeight,\n heightBuffer[i] / maxShort\n );\n\n cartographicScratch.longitude = CesiumMath.lerp(west, east, u);\n cartographicScratch.latitude = CesiumMath.lerp(south, north, v);\n cartographicScratch.height = height;\n\n minLongitude = Math.min(cartographicScratch.longitude, minLongitude);\n maxLongitude = Math.max(cartographicScratch.longitude, maxLongitude);\n minLatitude = Math.min(cartographicScratch.latitude, minLatitude);\n maxLatitude = Math.max(cartographicScratch.latitude, maxLatitude);\n\n const position = ellipsoid.cartographicToCartesian(cartographicScratch);\n\n uvs[i] = new Cartesian2(u, v);\n heights[i] = height;\n positions[i] = position;\n\n if (includeWebMercatorT) {\n webMercatorTs[i] =\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n cartographicScratch.latitude\n ) -\n southMercatorY) *\n oneOverMercatorHeight;\n }\n\n if (includeGeodeticSurfaceNormals) {\n geodeticSurfaceNormals[i] = ellipsoid.geodeticSurfaceNormal(position);\n }\n\n Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch);\n\n Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum);\n Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum);\n }\n\n const westIndicesSouthToNorth = copyAndSort(parameters.westIndices, function (\n a,\n b\n ) {\n return uvs[a].y - uvs[b].y;\n });\n const eastIndicesNorthToSouth = copyAndSort(parameters.eastIndices, function (\n a,\n b\n ) {\n return uvs[b].y - uvs[a].y;\n });\n const southIndicesEastToWest = copyAndSort(parameters.southIndices, function (\n a,\n b\n ) {\n return uvs[b].x - uvs[a].x;\n });\n const northIndicesWestToEast = copyAndSort(parameters.northIndices, function (\n a,\n b\n ) {\n return uvs[a].x - uvs[b].x;\n });\n\n let occludeePointInScaledSpace;\n if (minimumHeight < 0.0) {\n // Horizon culling point needs to be recomputed since the tile is at least partly under the ellipsoid.\n const occluder = new EllipsoidalOccluder(ellipsoid);\n occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\n center,\n positions,\n minimumHeight\n );\n }\n\n let hMin = minimumHeight;\n hMin = Math.min(\n hMin,\n findMinMaxSkirts(\n parameters.westIndices,\n parameters.westSkirtHeight,\n heights,\n uvs,\n rectangle,\n ellipsoid,\n toENU,\n minimum,\n maximum\n )\n );\n hMin = Math.min(\n hMin,\n findMinMaxSkirts(\n parameters.southIndices,\n parameters.southSkirtHeight,\n heights,\n uvs,\n rectangle,\n ellipsoid,\n toENU,\n minimum,\n maximum\n )\n );\n hMin = Math.min(\n hMin,\n findMinMaxSkirts(\n parameters.eastIndices,\n parameters.eastSkirtHeight,\n heights,\n uvs,\n rectangle,\n ellipsoid,\n toENU,\n minimum,\n maximum\n )\n );\n hMin = Math.min(\n hMin,\n findMinMaxSkirts(\n parameters.northIndices,\n parameters.northSkirtHeight,\n heights,\n uvs,\n rectangle,\n ellipsoid,\n toENU,\n minimum,\n maximum\n )\n );\n\n const aaBox = new AxisAlignedBoundingBox(minimum, maximum, center);\n const encoding = new TerrainEncoding(\n center,\n aaBox,\n hMin,\n maximumHeight,\n fromENU,\n hasVertexNormals,\n includeWebMercatorT,\n includeGeodeticSurfaceNormals,\n exaggeration,\n exaggerationRelativeHeight\n );\n const vertexStride = encoding.stride;\n const size =\n quantizedVertexCount * vertexStride + edgeVertexCount * vertexStride;\n const vertexBuffer = new Float32Array(size);\n\n let bufferIndex = 0;\n for (let j = 0; j < quantizedVertexCount; ++j) {\n if (hasVertexNormals) {\n const n = j * 2.0;\n toPack.x = octEncodedNormals[n];\n toPack.y = octEncodedNormals[n + 1];\n }\n\n bufferIndex = encoding.encode(\n vertexBuffer,\n bufferIndex,\n positions[j],\n uvs[j],\n heights[j],\n toPack,\n webMercatorTs[j],\n geodeticSurfaceNormals[j]\n );\n }\n\n const edgeTriangleCount = Math.max(0, (edgeVertexCount - 4) * 2);\n const indexBufferLength = parameters.indices.length + edgeTriangleCount * 3;\n const indexBuffer = IndexDatatype.createTypedArray(\n quantizedVertexCount + edgeVertexCount,\n indexBufferLength\n );\n indexBuffer.set(parameters.indices, 0);\n\n const percentage = 0.0001;\n const lonOffset = (maxLongitude - minLongitude) * percentage;\n const latOffset = (maxLatitude - minLatitude) * percentage;\n const westLongitudeOffset = -lonOffset;\n const westLatitudeOffset = 0.0;\n const eastLongitudeOffset = lonOffset;\n const eastLatitudeOffset = 0.0;\n const northLongitudeOffset = 0.0;\n const northLatitudeOffset = latOffset;\n const southLongitudeOffset = 0.0;\n const southLatitudeOffset = -latOffset;\n\n // Add skirts.\n let vertexBufferIndex = quantizedVertexCount * vertexStride;\n addSkirt(\n vertexBuffer,\n vertexBufferIndex,\n westIndicesSouthToNorth,\n encoding,\n heights,\n uvs,\n octEncodedNormals,\n ellipsoid,\n rectangle,\n parameters.westSkirtHeight,\n southMercatorY,\n oneOverMercatorHeight,\n westLongitudeOffset,\n westLatitudeOffset\n );\n vertexBufferIndex += parameters.westIndices.length * vertexStride;\n addSkirt(\n vertexBuffer,\n vertexBufferIndex,\n southIndicesEastToWest,\n encoding,\n heights,\n uvs,\n octEncodedNormals,\n ellipsoid,\n rectangle,\n parameters.southSkirtHeight,\n southMercatorY,\n oneOverMercatorHeight,\n southLongitudeOffset,\n southLatitudeOffset\n );\n vertexBufferIndex += parameters.southIndices.length * vertexStride;\n addSkirt(\n vertexBuffer,\n vertexBufferIndex,\n eastIndicesNorthToSouth,\n encoding,\n heights,\n uvs,\n octEncodedNormals,\n ellipsoid,\n rectangle,\n parameters.eastSkirtHeight,\n southMercatorY,\n oneOverMercatorHeight,\n eastLongitudeOffset,\n eastLatitudeOffset\n );\n vertexBufferIndex += parameters.eastIndices.length * vertexStride;\n addSkirt(\n vertexBuffer,\n vertexBufferIndex,\n northIndicesWestToEast,\n encoding,\n heights,\n uvs,\n octEncodedNormals,\n ellipsoid,\n rectangle,\n parameters.northSkirtHeight,\n southMercatorY,\n oneOverMercatorHeight,\n northLongitudeOffset,\n northLatitudeOffset\n );\n\n TerrainProvider.addSkirtIndices(\n westIndicesSouthToNorth,\n southIndicesEastToWest,\n eastIndicesNorthToSouth,\n northIndicesWestToEast,\n quantizedVertexCount,\n indexBuffer,\n parameters.indices.length\n );\n\n transferableObjects.push(vertexBuffer.buffer, indexBuffer.buffer);\n\n return {\n vertices: vertexBuffer.buffer,\n indices: indexBuffer.buffer,\n westIndicesSouthToNorth: westIndicesSouthToNorth,\n southIndicesEastToWest: southIndicesEastToWest,\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\n northIndicesWestToEast: northIndicesWestToEast,\n vertexStride: vertexStride,\n center: center,\n minimumHeight: minimumHeight,\n maximumHeight: maximumHeight,\n occludeePointInScaledSpace: occludeePointInScaledSpace,\n encoding: encoding,\n indexCountWithoutSkirts: parameters.indices.length,\n };\n}\n\nfunction findMinMaxSkirts(\n edgeIndices,\n edgeHeight,\n heights,\n uvs,\n rectangle,\n ellipsoid,\n toENU,\n minimum,\n maximum\n) {\n let hMin = Number.POSITIVE_INFINITY;\n\n const north = rectangle.north;\n const south = rectangle.south;\n let east = rectangle.east;\n const west = rectangle.west;\n\n if (east < west) {\n east += CesiumMath.TWO_PI;\n }\n\n const length = edgeIndices.length;\n for (let i = 0; i < length; ++i) {\n const index = edgeIndices[i];\n const h = heights[index];\n const uv = uvs[index];\n\n cartographicScratch.longitude = CesiumMath.lerp(west, east, uv.x);\n cartographicScratch.latitude = CesiumMath.lerp(south, north, uv.y);\n cartographicScratch.height = h - edgeHeight;\n\n const position = ellipsoid.cartographicToCartesian(\n cartographicScratch,\n cartesian3Scratch\n );\n Matrix4.multiplyByPoint(toENU, position, position);\n\n Cartesian3.minimumByComponent(position, minimum, minimum);\n Cartesian3.maximumByComponent(position, maximum, maximum);\n\n hMin = Math.min(hMin, cartographicScratch.height);\n }\n return hMin;\n}\n\nfunction addSkirt(\n vertexBuffer,\n vertexBufferIndex,\n edgeVertices,\n encoding,\n heights,\n uvs,\n octEncodedNormals,\n ellipsoid,\n rectangle,\n skirtLength,\n southMercatorY,\n oneOverMercatorHeight,\n longitudeOffset,\n latitudeOffset\n) {\n const hasVertexNormals = defined(octEncodedNormals);\n\n const north = rectangle.north;\n const south = rectangle.south;\n let east = rectangle.east;\n const west = rectangle.west;\n\n if (east < west) {\n east += CesiumMath.TWO_PI;\n }\n\n const length = edgeVertices.length;\n for (let i = 0; i < length; ++i) {\n const index = edgeVertices[i];\n const h = heights[index];\n const uv = uvs[index];\n\n cartographicScratch.longitude =\n CesiumMath.lerp(west, east, uv.x) + longitudeOffset;\n cartographicScratch.latitude =\n CesiumMath.lerp(south, north, uv.y) + latitudeOffset;\n cartographicScratch.height = h - skirtLength;\n\n const position = ellipsoid.cartographicToCartesian(\n cartographicScratch,\n cartesian3Scratch\n );\n\n if (hasVertexNormals) {\n const n = index * 2.0;\n toPack.x = octEncodedNormals[n];\n toPack.y = octEncodedNormals[n + 1];\n }\n\n let webMercatorT;\n if (encoding.hasWebMercatorT) {\n webMercatorT =\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\n cartographicScratch.latitude\n ) -\n southMercatorY) *\n oneOverMercatorHeight;\n }\n\n let geodeticSurfaceNormal;\n if (encoding.hasGeodeticSurfaceNormals) {\n geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(position);\n }\n\n vertexBufferIndex = encoding.encode(\n vertexBuffer,\n vertexBufferIndex,\n position,\n uv,\n cartographicScratch.height,\n toPack,\n webMercatorT,\n geodeticSurfaceNormal\n );\n }\n}\n\nfunction copyAndSort(typedArray, comparator) {\n let copy;\n if (typeof typedArray.slice === \"function\") {\n copy = typedArray.slice();\n if (typeof copy.sort !== \"function\") {\n // Sliced typed array isn't sortable, so we can't use it.\n copy = undefined;\n }\n }\n\n if (!defined(copy)) {\n copy = Array.prototype.slice.call(typedArray);\n }\n\n copy.sort(comparator);\n\n return copy;\n}\nexport default createTaskProcessorWorker(\n createVerticesFromQuantizedTerrainMesh\n);\n"],"names":["DeveloperError","CesiumMath","defined","IndexDatatype","Cartesian3","Cartographic","Cartesian2","Rectangle","Ellipsoid","Transforms","Matrix4","WebMercatorProjection","EllipsoidalOccluder","AxisAlignedBoundingBox","TerrainEncoding"],"mappings":"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"}