{"version":3,"file":"GeometryPipeline-e93f6439.js","sources":["../../../../Source/Core/barycentricCoordinates.js","../../../../Source/Core/Tipsify.js","../../../../Source/Core/GeometryPipeline.js"],"sourcesContent":["import Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Check from \"./Check.js\";\nimport defined from \"./defined.js\";\nimport CesiumMath from \"./Math.js\";\n\nconst scratchCartesian1 = new Cartesian3();\nconst scratchCartesian2 = new Cartesian3();\nconst scratchCartesian3 = new Cartesian3();\n\n/**\n * Computes the barycentric coordinates for a point with respect to a triangle.\n *\n * @function\n *\n * @param {Cartesian2|Cartesian3} point The point to test.\n * @param {Cartesian2|Cartesian3} p0 The first point of the triangle, corresponding to the barycentric x-axis.\n * @param {Cartesian2|Cartesian3} p1 The second point of the triangle, corresponding to the barycentric y-axis.\n * @param {Cartesian2|Cartesian3} p2 The third point of the triangle, corresponding to the barycentric z-axis.\n * @param {Cartesian3} [result] The object onto which to store the result.\n * @returns {Cartesian3|undefined} The modified result parameter or a new Cartesian3 instance if one was not provided. If the triangle is degenerate the function will return undefined.\n *\n * @example\n * // Returns Cartesian3.UNIT_X\n * const p = new Cesium.Cartesian3(-1.0, 0.0, 0.0);\n * const b = Cesium.barycentricCoordinates(p,\n * new Cesium.Cartesian3(-1.0, 0.0, 0.0),\n * new Cesium.Cartesian3( 1.0, 0.0, 0.0),\n * new Cesium.Cartesian3( 0.0, 1.0, 1.0));\n */\nfunction barycentricCoordinates(point, p0, p1, p2, result) {\n //>>includeStart('debug', pragmas.debug);\n Check.defined(\"point\", point);\n Check.defined(\"p0\", p0);\n Check.defined(\"p1\", p1);\n Check.defined(\"p2\", p2);\n //>>includeEnd('debug');\n\n if (!defined(result)) {\n result = new Cartesian3();\n }\n\n // Implementation based on http://www.blackpawn.com/texts/pointinpoly/default.html.\n let v0;\n let v1;\n let v2;\n let dot00;\n let dot01;\n let dot02;\n let dot11;\n let dot12;\n\n if (!defined(p0.z)) {\n if (Cartesian2.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_X, result);\n }\n if (Cartesian2.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n }\n if (Cartesian2.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n }\n\n v0 = Cartesian2.subtract(p1, p0, scratchCartesian1);\n v1 = Cartesian2.subtract(p2, p0, scratchCartesian2);\n v2 = Cartesian2.subtract(point, p0, scratchCartesian3);\n\n dot00 = Cartesian2.dot(v0, v0);\n dot01 = Cartesian2.dot(v0, v1);\n dot02 = Cartesian2.dot(v0, v2);\n dot11 = Cartesian2.dot(v1, v1);\n dot12 = Cartesian2.dot(v1, v2);\n } else {\n if (Cartesian3.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_X, result);\n }\n if (Cartesian3.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Y, result);\n }\n if (Cartesian3.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\n return Cartesian3.clone(Cartesian3.UNIT_Z, result);\n }\n\n v0 = Cartesian3.subtract(p1, p0, scratchCartesian1);\n v1 = Cartesian3.subtract(p2, p0, scratchCartesian2);\n v2 = Cartesian3.subtract(point, p0, scratchCartesian3);\n\n dot00 = Cartesian3.dot(v0, v0);\n dot01 = Cartesian3.dot(v0, v1);\n dot02 = Cartesian3.dot(v0, v2);\n dot11 = Cartesian3.dot(v1, v1);\n dot12 = Cartesian3.dot(v1, v2);\n }\n\n result.y = dot11 * dot02 - dot01 * dot12;\n result.z = dot00 * dot12 - dot01 * dot02;\n const q = dot00 * dot11 - dot01 * dot01;\n\n // Triangle is degenerate\n if (q === 0) {\n return undefined;\n }\n\n result.y /= q;\n result.z /= q;\n result.x = 1.0 - result.y - result.z;\n return result;\n}\nexport default barycentricCoordinates;\n","import defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\n\n/**\n * Encapsulates an algorithm to optimize triangles for the post\n * vertex-shader cache. This is based on the 2007 SIGGRAPH paper\n * 'Fast Triangle Reordering for Vertex Locality and Reduced Overdraw.'\n * The runtime is linear but several passes are made.\n *\n * @namespace Tipsify\n *\n * @see \n * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw\n * by Sander, Nehab, and Barczak\n *\n * @private\n */\nconst Tipsify = {};\n\n/**\n * Calculates the average cache miss ratio (ACMR) for a given set of indices.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\n * in the vertex buffer that define the geometry's triangles.\n * @param {Number} [options.maximumIndex] The maximum value of the elements in args.indices.\n * If not supplied, this value will be computed.\n * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\n * @returns {Number} The average cache miss ratio (ACMR).\n *\n * @exception {DeveloperError} indices length must be a multiple of three.\n * @exception {DeveloperError} cacheSize must be greater than two.\n *\n * @example\n * const indices = [0, 1, 2, 3, 4, 5];\n * const maxIndex = 5;\n * const cacheSize = 3;\n * const acmr = Cesium.Tipsify.calculateACMR({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\n */\nTipsify.calculateACMR = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n const indices = options.indices;\n let maximumIndex = options.maximumIndex;\n const cacheSize = defaultValue(options.cacheSize, 24);\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(indices)) {\n throw new DeveloperError(\"indices is required.\");\n }\n //>>includeEnd('debug');\n\n const numIndices = indices.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (numIndices < 3 || numIndices % 3 !== 0) {\n throw new DeveloperError(\"indices length must be a multiple of three.\");\n }\n if (maximumIndex <= 0) {\n throw new DeveloperError(\"maximumIndex must be greater than zero.\");\n }\n if (cacheSize < 3) {\n throw new DeveloperError(\"cacheSize must be greater than two.\");\n }\n //>>includeEnd('debug');\n\n // Compute the maximumIndex if not given\n if (!defined(maximumIndex)) {\n maximumIndex = 0;\n let currentIndex = 0;\n let intoIndices = indices[currentIndex];\n while (currentIndex < numIndices) {\n if (intoIndices > maximumIndex) {\n maximumIndex = intoIndices;\n }\n ++currentIndex;\n intoIndices = indices[currentIndex];\n }\n }\n\n // Vertex time stamps\n const vertexTimeStamps = [];\n for (let i = 0; i < maximumIndex + 1; i++) {\n vertexTimeStamps[i] = 0;\n }\n\n // Cache processing\n let s = cacheSize + 1;\n for (let j = 0; j < numIndices; ++j) {\n if (s - vertexTimeStamps[indices[j]] > cacheSize) {\n vertexTimeStamps[indices[j]] = s;\n ++s;\n }\n }\n\n return (s - cacheSize + 1) / (numIndices / 3);\n};\n\n/**\n * Optimizes triangles for the post-vertex shader cache.\n *\n * @param {Object} options Object with the following properties:\n * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\n * in the vertex buffer that define the geometry's triangles.\n * @param {Number} [options.maximumIndex] The maximum value of the elements in args.indices.\n * If not supplied, this value will be computed.\n * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\n * @returns {Number[]} A list of the input indices in an optimized order.\n *\n * @exception {DeveloperError} indices length must be a multiple of three.\n * @exception {DeveloperError} cacheSize must be greater than two.\n *\n * @example\n * const indices = [0, 1, 2, 3, 4, 5];\n * const maxIndex = 5;\n * const cacheSize = 3;\n * const reorderedIndices = Cesium.Tipsify.tipsify({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\n */\nTipsify.tipsify = function (options) {\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\n const indices = options.indices;\n const maximumIndex = options.maximumIndex;\n const cacheSize = defaultValue(options.cacheSize, 24);\n\n let cursor;\n\n function skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne) {\n while (deadEnd.length >= 1) {\n // while the stack is not empty\n const d = deadEnd[deadEnd.length - 1]; // top of the stack\n deadEnd.splice(deadEnd.length - 1, 1); // pop the stack\n\n if (vertices[d].numLiveTriangles > 0) {\n return d;\n }\n }\n\n while (cursor < maximumIndexPlusOne) {\n if (vertices[cursor].numLiveTriangles > 0) {\n ++cursor;\n return cursor - 1;\n }\n ++cursor;\n }\n return -1;\n }\n\n function getNextVertex(\n indices,\n cacheSize,\n oneRing,\n vertices,\n s,\n deadEnd,\n maximumIndexPlusOne\n ) {\n let n = -1;\n let p;\n let m = -1;\n let itOneRing = 0;\n while (itOneRing < oneRing.length) {\n const index = oneRing[itOneRing];\n if (vertices[index].numLiveTriangles) {\n p = 0;\n if (\n s -\n vertices[index].timeStamp +\n 2 * vertices[index].numLiveTriangles <=\n cacheSize\n ) {\n p = s - vertices[index].timeStamp;\n }\n if (p > m || m === -1) {\n m = p;\n n = index;\n }\n }\n ++itOneRing;\n }\n if (n === -1) {\n return skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne);\n }\n return n;\n }\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(indices)) {\n throw new DeveloperError(\"indices is required.\");\n }\n //>>includeEnd('debug');\n\n const numIndices = indices.length;\n\n //>>includeStart('debug', pragmas.debug);\n if (numIndices < 3 || numIndices % 3 !== 0) {\n throw new DeveloperError(\"indices length must be a multiple of three.\");\n }\n if (maximumIndex <= 0) {\n throw new DeveloperError(\"maximumIndex must be greater than zero.\");\n }\n if (cacheSize < 3) {\n throw new DeveloperError(\"cacheSize must be greater than two.\");\n }\n //>>includeEnd('debug');\n\n // Determine maximum index\n let maximumIndexPlusOne = 0;\n let currentIndex = 0;\n let intoIndices = indices[currentIndex];\n const endIndex = numIndices;\n if (defined(maximumIndex)) {\n maximumIndexPlusOne = maximumIndex + 1;\n } else {\n while (currentIndex < endIndex) {\n if (intoIndices > maximumIndexPlusOne) {\n maximumIndexPlusOne = intoIndices;\n }\n ++currentIndex;\n intoIndices = indices[currentIndex];\n }\n if (maximumIndexPlusOne === -1) {\n return 0;\n }\n ++maximumIndexPlusOne;\n }\n\n // Vertices\n const vertices = [];\n let i;\n for (i = 0; i < maximumIndexPlusOne; i++) {\n vertices[i] = {\n numLiveTriangles: 0,\n timeStamp: 0,\n vertexTriangles: [],\n };\n }\n currentIndex = 0;\n let triangle = 0;\n while (currentIndex < endIndex) {\n vertices[indices[currentIndex]].vertexTriangles.push(triangle);\n ++vertices[indices[currentIndex]].numLiveTriangles;\n vertices[indices[currentIndex + 1]].vertexTriangles.push(triangle);\n ++vertices[indices[currentIndex + 1]].numLiveTriangles;\n vertices[indices[currentIndex + 2]].vertexTriangles.push(triangle);\n ++vertices[indices[currentIndex + 2]].numLiveTriangles;\n ++triangle;\n currentIndex += 3;\n }\n\n // Starting index\n let f = 0;\n\n // Time Stamp\n let s = cacheSize + 1;\n cursor = 1;\n\n // Process\n let oneRing = [];\n const deadEnd = []; //Stack\n let vertex;\n let intoVertices;\n let currentOutputIndex = 0;\n const outputIndices = [];\n const numTriangles = numIndices / 3;\n const triangleEmitted = [];\n for (i = 0; i < numTriangles; i++) {\n triangleEmitted[i] = false;\n }\n let index;\n let limit;\n while (f !== -1) {\n oneRing = [];\n intoVertices = vertices[f];\n limit = intoVertices.vertexTriangles.length;\n for (let k = 0; k < limit; ++k) {\n triangle = intoVertices.vertexTriangles[k];\n if (!triangleEmitted[triangle]) {\n triangleEmitted[triangle] = true;\n currentIndex = triangle + triangle + triangle;\n for (let j = 0; j < 3; ++j) {\n // Set this index as a possible next index\n index = indices[currentIndex];\n oneRing.push(index);\n deadEnd.push(index);\n\n // Output index\n outputIndices[currentOutputIndex] = index;\n ++currentOutputIndex;\n\n // Cache processing\n vertex = vertices[index];\n --vertex.numLiveTriangles;\n if (s - vertex.timeStamp > cacheSize) {\n vertex.timeStamp = s;\n ++s;\n }\n ++currentIndex;\n }\n }\n }\n f = getNextVertex(\n indices,\n cacheSize,\n oneRing,\n vertices,\n s,\n deadEnd,\n maximumIndexPlusOne\n );\n }\n\n return outputIndices;\n};\nexport default Tipsify;\n","import AttributeCompression from \"./AttributeCompression.js\";\nimport barycentricCoordinates from \"./barycentricCoordinates.js\";\nimport BoundingSphere from \"./BoundingSphere.js\";\nimport Cartesian2 from \"./Cartesian2.js\";\nimport Cartesian3 from \"./Cartesian3.js\";\nimport Cartesian4 from \"./Cartesian4.js\";\nimport Cartographic from \"./Cartographic.js\";\nimport ComponentDatatype from \"./ComponentDatatype.js\";\nimport defaultValue from \"./defaultValue.js\";\nimport defined from \"./defined.js\";\nimport DeveloperError from \"./DeveloperError.js\";\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\nimport GeographicProjection from \"./GeographicProjection.js\";\nimport Geometry from \"./Geometry.js\";\nimport GeometryAttribute from \"./GeometryAttribute.js\";\nimport GeometryType from \"./GeometryType.js\";\nimport IndexDatatype from \"./IndexDatatype.js\";\nimport Intersect from \"./Intersect.js\";\nimport IntersectionTests from \"./IntersectionTests.js\";\nimport CesiumMath from \"./Math.js\";\nimport Matrix3 from \"./Matrix3.js\";\nimport Matrix4 from \"./Matrix4.js\";\nimport Plane from \"./Plane.js\";\nimport PrimitiveType from \"./PrimitiveType.js\";\nimport Tipsify from \"./Tipsify.js\";\n\n/**\n * Content pipeline functions for geometries.\n *\n * @namespace GeometryPipeline\n *\n * @see Geometry\n */\nconst GeometryPipeline = {};\n\nfunction addTriangle(lines, index, i0, i1, i2) {\n lines[index++] = i0;\n lines[index++] = i1;\n\n lines[index++] = i1;\n lines[index++] = i2;\n\n lines[index++] = i2;\n lines[index] = i0;\n}\n\nfunction trianglesToLines(triangles) {\n const count = triangles.length;\n const size = (count / 3) * 6;\n const lines = IndexDatatype.createTypedArray(count, size);\n\n let index = 0;\n for (let i = 0; i < count; i += 3, index += 6) {\n addTriangle(lines, index, triangles[i], triangles[i + 1], triangles[i + 2]);\n }\n\n return lines;\n}\n\nfunction triangleStripToLines(triangles) {\n const count = triangles.length;\n if (count >= 3) {\n const size = (count - 2) * 6;\n const lines = IndexDatatype.createTypedArray(count, size);\n\n addTriangle(lines, 0, triangles[0], triangles[1], triangles[2]);\n let index = 6;\n\n for (let i = 3; i < count; ++i, index += 6) {\n addTriangle(\n lines,\n index,\n triangles[i - 1],\n triangles[i],\n triangles[i - 2]\n );\n }\n\n return lines;\n }\n\n return new Uint16Array();\n}\n\nfunction triangleFanToLines(triangles) {\n if (triangles.length > 0) {\n const count = triangles.length - 1;\n const size = (count - 1) * 6;\n const lines = IndexDatatype.createTypedArray(count, size);\n\n const base = triangles[0];\n let index = 0;\n for (let i = 1; i < count; ++i, index += 6) {\n addTriangle(lines, index, base, triangles[i], triangles[i + 1]);\n }\n\n return lines;\n }\n\n return new Uint16Array();\n}\n\n/**\n * Converts a geometry's triangle indices to line indices. If the geometry has an indices\n * and its primitiveType is TRIANGLES, TRIANGLE_STRIP,\n * TRIANGLE_FAN, it is converted to LINES; otherwise, the geometry is not changed.\n *

\n * This is commonly used to create a wireframe geometry for visual debugging.\n *

\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified geometry argument, with its triangle indices converted to lines.\n *\n * @exception {DeveloperError} geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.toWireframe(geometry);\n */\nGeometryPipeline.toWireframe = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n const indices = geometry.indices;\n if (defined(indices)) {\n switch (geometry.primitiveType) {\n case PrimitiveType.TRIANGLES:\n geometry.indices = trianglesToLines(indices);\n break;\n case PrimitiveType.TRIANGLE_STRIP:\n geometry.indices = triangleStripToLines(indices);\n break;\n case PrimitiveType.TRIANGLE_FAN:\n geometry.indices = triangleFanToLines(indices);\n break;\n //>>includeStart('debug', pragmas.debug);\n default:\n throw new DeveloperError(\n \"geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\"\n );\n //>>includeEnd('debug');\n }\n\n geometry.primitiveType = PrimitiveType.LINES;\n }\n\n return geometry;\n};\n\n/**\n * Creates a new {@link Geometry} with LINES representing the provided\n * attribute (attributeName) for the provided geometry. This is used to\n * visualize vector attributes like normals, tangents, and bitangents.\n *\n * @param {Geometry} geometry The Geometry instance with the attribute.\n * @param {String} [attributeName='normal'] The name of the attribute.\n * @param {Number} [length=10000.0] The length of each line segment in meters. This can be negative to point the vector in the opposite direction.\n * @returns {Geometry} A new Geometry instance with line segments for the vector.\n *\n * @exception {DeveloperError} geometry.attributes must have an attribute with the same name as the attributeName parameter.\n *\n * @example\n * const geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'bitangent', 100000.0);\n */\nGeometryPipeline.createLineSegmentsForVectors = function (\n geometry,\n attributeName,\n length\n) {\n attributeName = defaultValue(attributeName, \"normal\");\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (!defined(geometry.attributes.position)) {\n throw new DeveloperError(\"geometry.attributes.position is required.\");\n }\n if (!defined(geometry.attributes[attributeName])) {\n throw new DeveloperError(\n `geometry.attributes must have an attribute with the same name as the attributeName parameter, ${attributeName}.`\n );\n }\n //>>includeEnd('debug');\n\n length = defaultValue(length, 10000.0);\n\n const positions = geometry.attributes.position.values;\n const vectors = geometry.attributes[attributeName].values;\n const positionsLength = positions.length;\n\n const newPositions = new Float64Array(2 * positionsLength);\n\n let j = 0;\n for (let i = 0; i < positionsLength; i += 3) {\n newPositions[j++] = positions[i];\n newPositions[j++] = positions[i + 1];\n newPositions[j++] = positions[i + 2];\n\n newPositions[j++] = positions[i] + vectors[i] * length;\n newPositions[j++] = positions[i + 1] + vectors[i + 1] * length;\n newPositions[j++] = positions[i + 2] + vectors[i + 2] * length;\n }\n\n let newBoundingSphere;\n const bs = geometry.boundingSphere;\n if (defined(bs)) {\n newBoundingSphere = new BoundingSphere(bs.center, bs.radius + length);\n }\n\n return new Geometry({\n attributes: {\n position: new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: newPositions,\n }),\n },\n primitiveType: PrimitiveType.LINES,\n boundingSphere: newBoundingSphere,\n });\n};\n\n/**\n * Creates an object that maps attribute names to unique locations (indices)\n * for matching vertex attributes and shader programs.\n *\n * @param {Geometry} geometry The geometry, which is not modified, to create the object for.\n * @returns {Object} An object with attribute name / index pairs.\n *\n * @example\n * const attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry);\n * // Example output\n * // {\n * // 'position' : 0,\n * // 'normal' : 1\n * // }\n */\nGeometryPipeline.createAttributeLocations = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug')\n\n // There can be a WebGL performance hit when attribute 0 is disabled, so\n // assign attribute locations to well-known attributes.\n const semantics = [\n \"position\",\n \"positionHigh\",\n \"positionLow\",\n\n // From VertexFormat.position - after 2D projection and high-precision encoding\n \"position3DHigh\",\n \"position3DLow\",\n \"position2DHigh\",\n \"position2DLow\",\n\n // From Primitive\n \"pickColor\",\n\n // From VertexFormat\n \"normal\",\n \"st\",\n \"tangent\",\n \"bitangent\",\n\n // For shadow volumes\n \"extrudeDirection\",\n\n // From compressing texture coordinates and normals\n \"compressedAttributes\",\n ];\n\n const attributes = geometry.attributes;\n const indices = {};\n let j = 0;\n let i;\n const len = semantics.length;\n\n // Attribute locations for well-known attributes\n for (i = 0; i < len; ++i) {\n const semantic = semantics[i];\n\n if (defined(attributes[semantic])) {\n indices[semantic] = j++;\n }\n }\n\n // Locations for custom attributes\n for (const name in attributes) {\n if (attributes.hasOwnProperty(name) && !defined(indices[name])) {\n indices[name] = j++;\n }\n }\n\n return indices;\n};\n\n/**\n * Reorders a geometry's attributes and indices to achieve better performance from the GPU's pre-vertex-shader cache.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified geometry argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache.\n *\n * @exception {DeveloperError} Each attribute array in geometry.attributes must have the same number of attributes.\n *\n *\n * @example\n * geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry);\n *\n * @see GeometryPipeline.reorderForPostVertexCache\n */\nGeometryPipeline.reorderForPreVertexCache = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n const numVertices = Geometry.computeNumberOfVertices(geometry);\n\n const indices = geometry.indices;\n if (defined(indices)) {\n const indexCrossReferenceOldToNew = new Int32Array(numVertices);\n for (let i = 0; i < numVertices; i++) {\n indexCrossReferenceOldToNew[i] = -1;\n }\n\n // Construct cross reference and reorder indices\n const indicesIn = indices;\n const numIndices = indicesIn.length;\n const indicesOut = IndexDatatype.createTypedArray(numVertices, numIndices);\n\n let intoIndicesIn = 0;\n let intoIndicesOut = 0;\n let nextIndex = 0;\n let tempIndex;\n while (intoIndicesIn < numIndices) {\n tempIndex = indexCrossReferenceOldToNew[indicesIn[intoIndicesIn]];\n if (tempIndex !== -1) {\n indicesOut[intoIndicesOut] = tempIndex;\n } else {\n tempIndex = indicesIn[intoIndicesIn];\n indexCrossReferenceOldToNew[tempIndex] = nextIndex;\n\n indicesOut[intoIndicesOut] = nextIndex;\n ++nextIndex;\n }\n ++intoIndicesIn;\n ++intoIndicesOut;\n }\n geometry.indices = indicesOut;\n\n // Reorder attributes\n const attributes = geometry.attributes;\n for (const property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property]) &&\n defined(attributes[property].values)\n ) {\n const attribute = attributes[property];\n const elementsIn = attribute.values;\n let intoElementsIn = 0;\n const numComponents = attribute.componentsPerAttribute;\n const elementsOut = ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n nextIndex * numComponents\n );\n while (intoElementsIn < numVertices) {\n const temp = indexCrossReferenceOldToNew[intoElementsIn];\n if (temp !== -1) {\n for (let j = 0; j < numComponents; j++) {\n elementsOut[numComponents * temp + j] =\n elementsIn[numComponents * intoElementsIn + j];\n }\n }\n ++intoElementsIn;\n }\n attribute.values = elementsOut;\n }\n }\n }\n\n return geometry;\n};\n\n/**\n * Reorders a geometry's indices to achieve better performance from the GPU's\n * post vertex-shader cache by using the Tipsify algorithm. If the geometry primitiveType\n * is not TRIANGLES or the geometry does not have an indices, this function has no effect.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {Number} [cacheCapacity=24] The number of vertices that can be held in the GPU's vertex cache.\n * @returns {Geometry} The modified geometry argument, with its indices reordered for the post-vertex-shader cache.\n *\n * @exception {DeveloperError} cacheCapacity must be greater than two.\n *\n *\n * @example\n * geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry);\n *\n * @see GeometryPipeline.reorderForPreVertexCache\n * @see {@link http://gfx.cs.princ0eton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf|Fast Triangle Reordering for Vertex Locality and Reduced Overdraw}\n * by Sander, Nehab, and Barczak\n */\nGeometryPipeline.reorderForPostVertexCache = function (\n geometry,\n cacheCapacity\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n const indices = geometry.indices;\n if (geometry.primitiveType === PrimitiveType.TRIANGLES && defined(indices)) {\n const numIndices = indices.length;\n let maximumIndex = 0;\n for (let j = 0; j < numIndices; j++) {\n if (indices[j] > maximumIndex) {\n maximumIndex = indices[j];\n }\n }\n geometry.indices = Tipsify.tipsify({\n indices: indices,\n maximumIndex: maximumIndex,\n cacheSize: cacheCapacity,\n });\n }\n\n return geometry;\n};\n\nfunction copyAttributesDescriptions(attributes) {\n const newAttributes = {};\n\n for (const attribute in attributes) {\n if (\n attributes.hasOwnProperty(attribute) &&\n defined(attributes[attribute]) &&\n defined(attributes[attribute].values)\n ) {\n const attr = attributes[attribute];\n newAttributes[attribute] = new GeometryAttribute({\n componentDatatype: attr.componentDatatype,\n componentsPerAttribute: attr.componentsPerAttribute,\n normalize: attr.normalize,\n values: [],\n });\n }\n }\n\n return newAttributes;\n}\n\nfunction copyVertex(destinationAttributes, sourceAttributes, index) {\n for (const attribute in sourceAttributes) {\n if (\n sourceAttributes.hasOwnProperty(attribute) &&\n defined(sourceAttributes[attribute]) &&\n defined(sourceAttributes[attribute].values)\n ) {\n const attr = sourceAttributes[attribute];\n\n for (let k = 0; k < attr.componentsPerAttribute; ++k) {\n destinationAttributes[attribute].values.push(\n attr.values[index * attr.componentsPerAttribute + k]\n );\n }\n }\n }\n}\n\n/**\n * Splits a geometry into multiple geometries, if necessary, to ensure that indices in the\n * indices fit into unsigned shorts. This is used to meet the WebGL requirements\n * when unsigned int indices are not supported.\n *

\n * If the geometry does not have any indices, this function has no effect.\n *

\n *\n * @param {Geometry} geometry The geometry to be split into multiple geometries.\n * @returns {Geometry[]} An array of geometries, each with indices that fit into unsigned shorts.\n *\n * @exception {DeveloperError} geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS\n * @exception {DeveloperError} All geometry attribute lists must have the same number of attributes.\n *\n * @example\n * const geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry);\n */\nGeometryPipeline.fitToUnsignedShortIndices = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (\n defined(geometry.indices) &&\n geometry.primitiveType !== PrimitiveType.TRIANGLES &&\n geometry.primitiveType !== PrimitiveType.LINES &&\n geometry.primitiveType !== PrimitiveType.POINTS\n ) {\n throw new DeveloperError(\n \"geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS.\"\n );\n }\n //>>includeEnd('debug');\n\n const geometries = [];\n\n // If there's an index list and more than 64K attributes, it is possible that\n // some indices are outside the range of unsigned short [0, 64K - 1]\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n if (\n defined(geometry.indices) &&\n numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES\n ) {\n let oldToNewIndex = [];\n let newIndices = [];\n let currentIndex = 0;\n let newAttributes = copyAttributesDescriptions(geometry.attributes);\n\n const originalIndices = geometry.indices;\n const numberOfIndices = originalIndices.length;\n\n let indicesPerPrimitive;\n\n if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\n indicesPerPrimitive = 3;\n } else if (geometry.primitiveType === PrimitiveType.LINES) {\n indicesPerPrimitive = 2;\n } else if (geometry.primitiveType === PrimitiveType.POINTS) {\n indicesPerPrimitive = 1;\n }\n\n for (let j = 0; j < numberOfIndices; j += indicesPerPrimitive) {\n for (let k = 0; k < indicesPerPrimitive; ++k) {\n const x = originalIndices[j + k];\n let i = oldToNewIndex[x];\n if (!defined(i)) {\n i = currentIndex++;\n oldToNewIndex[x] = i;\n copyVertex(newAttributes, geometry.attributes, x);\n }\n newIndices.push(i);\n }\n\n if (\n currentIndex + indicesPerPrimitive >=\n CesiumMath.SIXTY_FOUR_KILOBYTES\n ) {\n geometries.push(\n new Geometry({\n attributes: newAttributes,\n indices: newIndices,\n primitiveType: geometry.primitiveType,\n boundingSphere: geometry.boundingSphere,\n boundingSphereCV: geometry.boundingSphereCV,\n })\n );\n\n // Reset for next vertex-array\n oldToNewIndex = [];\n newIndices = [];\n currentIndex = 0;\n newAttributes = copyAttributesDescriptions(geometry.attributes);\n }\n }\n\n if (newIndices.length !== 0) {\n geometries.push(\n new Geometry({\n attributes: newAttributes,\n indices: newIndices,\n primitiveType: geometry.primitiveType,\n boundingSphere: geometry.boundingSphere,\n boundingSphereCV: geometry.boundingSphereCV,\n })\n );\n }\n } else {\n // No need to split into multiple geometries\n geometries.push(geometry);\n }\n\n return geometries;\n};\n\nconst scratchProjectTo2DCartesian3 = new Cartesian3();\nconst scratchProjectTo2DCartographic = new Cartographic();\n\n/**\n * Projects a geometry's 3D position attribute to 2D, replacing the position\n * attribute with separate position3D and position2D attributes.\n *

\n * If the geometry does not have a position, this function has no effect.\n *

\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {String} attributeName The name of the attribute.\n * @param {String} attributeName3D The name of the attribute in 3D.\n * @param {String} attributeName2D The name of the attribute in 2D.\n * @param {Object} [projection=new GeographicProjection()] The projection to use.\n * @returns {Geometry} The modified geometry argument with position3D and position2D attributes.\n *\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\n * @exception {DeveloperError} Could not project a point to 2D.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D');\n */\nGeometryPipeline.projectTo2D = function (\n geometry,\n attributeName,\n attributeName3D,\n attributeName2D,\n projection\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (!defined(attributeName)) {\n throw new DeveloperError(\"attributeName is required.\");\n }\n if (!defined(attributeName3D)) {\n throw new DeveloperError(\"attributeName3D is required.\");\n }\n if (!defined(attributeName2D)) {\n throw new DeveloperError(\"attributeName2D is required.\");\n }\n if (!defined(geometry.attributes[attributeName])) {\n throw new DeveloperError(\n `geometry must have attribute matching the attributeName argument: ${attributeName}.`\n );\n }\n if (\n geometry.attributes[attributeName].componentDatatype !==\n ComponentDatatype.DOUBLE\n ) {\n throw new DeveloperError(\n \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\"\n );\n }\n //>>includeEnd('debug');\n\n const attribute = geometry.attributes[attributeName];\n projection = defined(projection) ? projection : new GeographicProjection();\n const ellipsoid = projection.ellipsoid;\n\n // Project original values to 2D.\n const values3D = attribute.values;\n const projectedValues = new Float64Array(values3D.length);\n let index = 0;\n\n for (let i = 0; i < values3D.length; i += 3) {\n const value = Cartesian3.fromArray(\n values3D,\n i,\n scratchProjectTo2DCartesian3\n );\n\n const lonLat = ellipsoid.cartesianToCartographic(\n value,\n scratchProjectTo2DCartographic\n );\n //>>includeStart('debug', pragmas.debug);\n if (!defined(lonLat)) {\n throw new DeveloperError(\n `Could not project point (${value.x}, ${value.y}, ${value.z}) to 2D.`\n );\n }\n //>>includeEnd('debug');\n\n const projectedLonLat = projection.project(\n lonLat,\n scratchProjectTo2DCartesian3\n );\n\n projectedValues[index++] = projectedLonLat.x;\n projectedValues[index++] = projectedLonLat.y;\n projectedValues[index++] = projectedLonLat.z;\n }\n\n // Rename original cartesians to WGS84 cartesians.\n geometry.attributes[attributeName3D] = attribute;\n\n // Replace original cartesians with 2D projected cartesians\n geometry.attributes[attributeName2D] = new GeometryAttribute({\n componentDatatype: ComponentDatatype.DOUBLE,\n componentsPerAttribute: 3,\n values: projectedValues,\n });\n delete geometry.attributes[attributeName];\n\n return geometry;\n};\n\nconst encodedResult = {\n high: 0.0,\n low: 0.0,\n};\n\n/**\n * Encodes floating-point geometry attribute values as two separate attributes to improve\n * rendering precision.\n *

\n * This is commonly used to create high-precision position vertex attributes.\n *

\n *\n * @param {Geometry} geometry The geometry to modify.\n * @param {String} attributeName The name of the attribute.\n * @param {String} attributeHighName The name of the attribute for the encoded high bits.\n * @param {String} attributeLowName The name of the attribute for the encoded low bits.\n * @returns {Geometry} The modified geometry argument, with its encoded attribute.\n *\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow');\n */\nGeometryPipeline.encodeAttribute = function (\n geometry,\n attributeName,\n attributeHighName,\n attributeLowName\n) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (!defined(attributeName)) {\n throw new DeveloperError(\"attributeName is required.\");\n }\n if (!defined(attributeHighName)) {\n throw new DeveloperError(\"attributeHighName is required.\");\n }\n if (!defined(attributeLowName)) {\n throw new DeveloperError(\"attributeLowName is required.\");\n }\n if (!defined(geometry.attributes[attributeName])) {\n throw new DeveloperError(\n `geometry must have attribute matching the attributeName argument: ${attributeName}.`\n );\n }\n if (\n geometry.attributes[attributeName].componentDatatype !==\n ComponentDatatype.DOUBLE\n ) {\n throw new DeveloperError(\n \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\"\n );\n }\n //>>includeEnd('debug');\n\n const attribute = geometry.attributes[attributeName];\n const values = attribute.values;\n const length = values.length;\n const highValues = new Float32Array(length);\n const lowValues = new Float32Array(length);\n\n for (let i = 0; i < length; ++i) {\n EncodedCartesian3.encode(values[i], encodedResult);\n highValues[i] = encodedResult.high;\n lowValues[i] = encodedResult.low;\n }\n\n const componentsPerAttribute = attribute.componentsPerAttribute;\n\n geometry.attributes[attributeHighName] = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: componentsPerAttribute,\n values: highValues,\n });\n geometry.attributes[attributeLowName] = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: componentsPerAttribute,\n values: lowValues,\n });\n delete geometry.attributes[attributeName];\n\n return geometry;\n};\n\nlet scratchCartesian3 = new Cartesian3();\n\nfunction transformPoint(matrix, attribute) {\n if (defined(attribute)) {\n const values = attribute.values;\n const length = values.length;\n for (let i = 0; i < length; i += 3) {\n Cartesian3.unpack(values, i, scratchCartesian3);\n Matrix4.multiplyByPoint(matrix, scratchCartesian3, scratchCartesian3);\n Cartesian3.pack(scratchCartesian3, values, i);\n }\n }\n}\n\nfunction transformVector(matrix, attribute) {\n if (defined(attribute)) {\n const values = attribute.values;\n const length = values.length;\n for (let i = 0; i < length; i += 3) {\n Cartesian3.unpack(values, i, scratchCartesian3);\n Matrix3.multiplyByVector(matrix, scratchCartesian3, scratchCartesian3);\n scratchCartesian3 = Cartesian3.normalize(\n scratchCartesian3,\n scratchCartesian3\n );\n Cartesian3.pack(scratchCartesian3, values, i);\n }\n }\n}\n\nconst inverseTranspose = new Matrix4();\nconst normalMatrix = new Matrix3();\n\n/**\n * Transforms a geometry instance to world coordinates. This changes\n * the instance's modelMatrix to {@link Matrix4.IDENTITY} and transforms the\n * following attributes if they are present: position, normal,\n * tangent, and bitangent.\n *\n * @param {GeometryInstance} instance The geometry instance to modify.\n * @returns {GeometryInstance} The modified instance argument, with its attributes transforms to world coordinates.\n *\n * @example\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instance);\n */\nGeometryPipeline.transformToWorldCoordinates = function (instance) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(instance)) {\n throw new DeveloperError(\"instance is required.\");\n }\n //>>includeEnd('debug');\n\n const modelMatrix = instance.modelMatrix;\n\n if (Matrix4.equals(modelMatrix, Matrix4.IDENTITY)) {\n // Already in world coordinates\n return instance;\n }\n\n const attributes = instance.geometry.attributes;\n\n // Transform attributes in known vertex formats\n transformPoint(modelMatrix, attributes.position);\n transformPoint(modelMatrix, attributes.prevPosition);\n transformPoint(modelMatrix, attributes.nextPosition);\n\n if (\n defined(attributes.normal) ||\n defined(attributes.tangent) ||\n defined(attributes.bitangent)\n ) {\n Matrix4.inverse(modelMatrix, inverseTranspose);\n Matrix4.transpose(inverseTranspose, inverseTranspose);\n Matrix4.getMatrix3(inverseTranspose, normalMatrix);\n\n transformVector(normalMatrix, attributes.normal);\n transformVector(normalMatrix, attributes.tangent);\n transformVector(normalMatrix, attributes.bitangent);\n }\n\n const boundingSphere = instance.geometry.boundingSphere;\n if (defined(boundingSphere)) {\n instance.geometry.boundingSphere = BoundingSphere.transform(\n boundingSphere,\n modelMatrix,\n boundingSphere\n );\n }\n\n instance.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\n\n return instance;\n};\n\nfunction findAttributesInAllGeometries(instances, propertyName) {\n const length = instances.length;\n\n const attributesInAllGeometries = {};\n\n const attributes0 = instances[0][propertyName].attributes;\n let name;\n\n for (name in attributes0) {\n if (\n attributes0.hasOwnProperty(name) &&\n defined(attributes0[name]) &&\n defined(attributes0[name].values)\n ) {\n const attribute = attributes0[name];\n let numberOfComponents = attribute.values.length;\n let inAllGeometries = true;\n\n // Does this same attribute exist in all geometries?\n for (let i = 1; i < length; ++i) {\n const otherAttribute = instances[i][propertyName].attributes[name];\n\n if (\n !defined(otherAttribute) ||\n attribute.componentDatatype !== otherAttribute.componentDatatype ||\n attribute.componentsPerAttribute !==\n otherAttribute.componentsPerAttribute ||\n attribute.normalize !== otherAttribute.normalize\n ) {\n inAllGeometries = false;\n break;\n }\n\n numberOfComponents += otherAttribute.values.length;\n }\n\n if (inAllGeometries) {\n attributesInAllGeometries[name] = new GeometryAttribute({\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n values: ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n numberOfComponents\n ),\n });\n }\n }\n }\n\n return attributesInAllGeometries;\n}\n\nconst tempScratch = new Cartesian3();\n\nfunction combineGeometries(instances, propertyName) {\n const length = instances.length;\n\n let name;\n let i;\n let j;\n let k;\n\n const m = instances[0].modelMatrix;\n const haveIndices = defined(instances[0][propertyName].indices);\n const primitiveType = instances[0][propertyName].primitiveType;\n\n //>>includeStart('debug', pragmas.debug);\n for (i = 1; i < length; ++i) {\n if (!Matrix4.equals(instances[i].modelMatrix, m)) {\n throw new DeveloperError(\"All instances must have the same modelMatrix.\");\n }\n if (defined(instances[i][propertyName].indices) !== haveIndices) {\n throw new DeveloperError(\n \"All instance geometries must have an indices or not have one.\"\n );\n }\n if (instances[i][propertyName].primitiveType !== primitiveType) {\n throw new DeveloperError(\n \"All instance geometries must have the same primitiveType.\"\n );\n }\n }\n //>>includeEnd('debug');\n\n // Find subset of attributes in all geometries\n const attributes = findAttributesInAllGeometries(instances, propertyName);\n let values;\n let sourceValues;\n let sourceValuesLength;\n\n // Combine attributes from each geometry into a single typed array\n for (name in attributes) {\n if (attributes.hasOwnProperty(name)) {\n values = attributes[name].values;\n\n k = 0;\n for (i = 0; i < length; ++i) {\n sourceValues = instances[i][propertyName].attributes[name].values;\n sourceValuesLength = sourceValues.length;\n\n for (j = 0; j < sourceValuesLength; ++j) {\n values[k++] = sourceValues[j];\n }\n }\n }\n }\n\n // Combine index lists\n let indices;\n\n if (haveIndices) {\n let numberOfIndices = 0;\n for (i = 0; i < length; ++i) {\n numberOfIndices += instances[i][propertyName].indices.length;\n }\n\n const numberOfVertices = Geometry.computeNumberOfVertices(\n new Geometry({\n attributes: attributes,\n primitiveType: PrimitiveType.POINTS,\n })\n );\n const destIndices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfIndices\n );\n\n let destOffset = 0;\n let offset = 0;\n\n for (i = 0; i < length; ++i) {\n const sourceIndices = instances[i][propertyName].indices;\n const sourceIndicesLen = sourceIndices.length;\n\n for (k = 0; k < sourceIndicesLen; ++k) {\n destIndices[destOffset++] = offset + sourceIndices[k];\n }\n\n offset += Geometry.computeNumberOfVertices(instances[i][propertyName]);\n }\n\n indices = destIndices;\n }\n\n // Create bounding sphere that includes all instances\n let center = new Cartesian3();\n let radius = 0.0;\n let bs;\n\n for (i = 0; i < length; ++i) {\n bs = instances[i][propertyName].boundingSphere;\n if (!defined(bs)) {\n // If any geometries have an undefined bounding sphere, then so does the combined geometry\n center = undefined;\n break;\n }\n\n Cartesian3.add(bs.center, center, center);\n }\n\n if (defined(center)) {\n Cartesian3.divideByScalar(center, length, center);\n\n for (i = 0; i < length; ++i) {\n bs = instances[i][propertyName].boundingSphere;\n const tempRadius =\n Cartesian3.magnitude(\n Cartesian3.subtract(bs.center, center, tempScratch)\n ) + bs.radius;\n\n if (tempRadius > radius) {\n radius = tempRadius;\n }\n }\n }\n\n return new Geometry({\n attributes: attributes,\n indices: indices,\n primitiveType: primitiveType,\n boundingSphere: defined(center)\n ? new BoundingSphere(center, radius)\n : undefined,\n });\n}\n\n/**\n * Combines geometry from several {@link GeometryInstance} objects into one geometry.\n * This concatenates the attributes, concatenates and adjusts the indices, and creates\n * a bounding sphere encompassing all instances.\n *

\n * If the instances do not have the same attributes, a subset of attributes common\n * to all instances is used, and the others are ignored.\n *

\n *

\n * This is used by {@link Primitive} to efficiently render a large amount of static data.\n *

\n *\n * @private\n *\n * @param {GeometryInstance[]} [instances] The array of {@link GeometryInstance} objects whose geometry will be combined.\n * @returns {Geometry} A single geometry created from the provided geometry instances.\n *\n * @exception {DeveloperError} All instances must have the same modelMatrix.\n * @exception {DeveloperError} All instance geometries must have an indices or not have one.\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\n *\n *\n * @example\n * for (let i = 0; i < instances.length; ++i) {\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]);\n * }\n * const geometries = Cesium.GeometryPipeline.combineInstances(instances);\n *\n * @see GeometryPipeline.transformToWorldCoordinates\n */\nGeometryPipeline.combineInstances = function (instances) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(instances) || instances.length < 1) {\n throw new DeveloperError(\n \"instances is required and must have length greater than zero.\"\n );\n }\n //>>includeEnd('debug');\n\n const instanceGeometry = [];\n const instanceSplitGeometry = [];\n const length = instances.length;\n for (let i = 0; i < length; ++i) {\n const instance = instances[i];\n\n if (defined(instance.geometry)) {\n instanceGeometry.push(instance);\n } else if (\n defined(instance.westHemisphereGeometry) &&\n defined(instance.eastHemisphereGeometry)\n ) {\n instanceSplitGeometry.push(instance);\n }\n }\n\n const geometries = [];\n if (instanceGeometry.length > 0) {\n geometries.push(combineGeometries(instanceGeometry, \"geometry\"));\n }\n\n if (instanceSplitGeometry.length > 0) {\n geometries.push(\n combineGeometries(instanceSplitGeometry, \"westHemisphereGeometry\")\n );\n geometries.push(\n combineGeometries(instanceSplitGeometry, \"eastHemisphereGeometry\")\n );\n }\n\n return geometries;\n};\n\nconst normal = new Cartesian3();\nconst v0 = new Cartesian3();\nconst v1 = new Cartesian3();\nconst v2 = new Cartesian3();\n\n/**\n * Computes per-vertex normals for a geometry containing TRIANGLES by averaging the normals of\n * all triangles incident to the vertex. The result is a new normal attribute added to the geometry.\n * This assumes a counter-clockwise winding order.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified geometry argument with the computed normal attribute.\n *\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\n *\n * @example\n * Cesium.GeometryPipeline.computeNormal(geometry);\n */\nGeometryPipeline.computeNormal = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n if (\n !defined(geometry.attributes.position) ||\n !defined(geometry.attributes.position.values)\n ) {\n throw new DeveloperError(\n \"geometry.attributes.position.values is required.\"\n );\n }\n if (!defined(geometry.indices)) {\n throw new DeveloperError(\"geometry.indices is required.\");\n }\n if (geometry.indices.length < 2 || geometry.indices.length % 3 !== 0) {\n throw new DeveloperError(\n \"geometry.indices length must be greater than 0 and be a multiple of 3.\"\n );\n }\n if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\n throw new DeveloperError(\n \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\"\n );\n }\n //>>includeEnd('debug');\n\n const indices = geometry.indices;\n const attributes = geometry.attributes;\n const vertices = attributes.position.values;\n const numVertices = attributes.position.values.length / 3;\n const numIndices = indices.length;\n const normalsPerVertex = new Array(numVertices);\n const normalsPerTriangle = new Array(numIndices / 3);\n const normalIndices = new Array(numIndices);\n let i;\n for (i = 0; i < numVertices; i++) {\n normalsPerVertex[i] = {\n indexOffset: 0,\n count: 0,\n currentCount: 0,\n };\n }\n\n let j = 0;\n for (i = 0; i < numIndices; i += 3) {\n const i0 = indices[i];\n const i1 = indices[i + 1];\n const i2 = indices[i + 2];\n const i03 = i0 * 3;\n const i13 = i1 * 3;\n const i23 = i2 * 3;\n\n v0.x = vertices[i03];\n v0.y = vertices[i03 + 1];\n v0.z = vertices[i03 + 2];\n v1.x = vertices[i13];\n v1.y = vertices[i13 + 1];\n v1.z = vertices[i13 + 2];\n v2.x = vertices[i23];\n v2.y = vertices[i23 + 1];\n v2.z = vertices[i23 + 2];\n\n normalsPerVertex[i0].count++;\n normalsPerVertex[i1].count++;\n normalsPerVertex[i2].count++;\n\n Cartesian3.subtract(v1, v0, v1);\n Cartesian3.subtract(v2, v0, v2);\n normalsPerTriangle[j] = Cartesian3.cross(v1, v2, new Cartesian3());\n j++;\n }\n\n let indexOffset = 0;\n for (i = 0; i < numVertices; i++) {\n normalsPerVertex[i].indexOffset += indexOffset;\n indexOffset += normalsPerVertex[i].count;\n }\n\n j = 0;\n let vertexNormalData;\n for (i = 0; i < numIndices; i += 3) {\n vertexNormalData = normalsPerVertex[indices[i]];\n let index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n normalIndices[index] = j;\n vertexNormalData.currentCount++;\n\n vertexNormalData = normalsPerVertex[indices[i + 1]];\n index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n normalIndices[index] = j;\n vertexNormalData.currentCount++;\n\n vertexNormalData = normalsPerVertex[indices[i + 2]];\n index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\n normalIndices[index] = j;\n vertexNormalData.currentCount++;\n\n j++;\n }\n\n const normalValues = new Float32Array(numVertices * 3);\n for (i = 0; i < numVertices; i++) {\n const i3 = i * 3;\n vertexNormalData = normalsPerVertex[i];\n Cartesian3.clone(Cartesian3.ZERO, normal);\n if (vertexNormalData.count > 0) {\n for (j = 0; j < vertexNormalData.count; j++) {\n Cartesian3.add(\n normal,\n normalsPerTriangle[normalIndices[vertexNormalData.indexOffset + j]],\n normal\n );\n }\n\n // We can run into an issue where a vertex is used with 2 primitives that have opposite winding order.\n if (\n Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\n ) {\n Cartesian3.clone(\n normalsPerTriangle[normalIndices[vertexNormalData.indexOffset]],\n normal\n );\n }\n }\n\n // We end up with a zero vector probably because of a degenerate triangle\n if (\n Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\n ) {\n // Default to (0,0,1)\n normal.z = 1.0;\n }\n\n Cartesian3.normalize(normal, normal);\n normalValues[i3] = normal.x;\n normalValues[i3 + 1] = normal.y;\n normalValues[i3 + 2] = normal.z;\n }\n\n geometry.attributes.normal = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: normalValues,\n });\n\n return geometry;\n};\n\nconst normalScratch = new Cartesian3();\nconst normalScale = new Cartesian3();\nconst tScratch = new Cartesian3();\n\n/**\n * Computes per-vertex tangents and bitangents for a geometry containing TRIANGLES.\n * The result is new tangent and bitangent attributes added to the geometry.\n * This assumes a counter-clockwise winding order.\n *

\n * Based on Computing Tangent Space Basis Vectors\n * for an Arbitrary Mesh by Eric Lengyel.\n *

\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified geometry argument with the computed tangent and bitangent attributes.\n *\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\n *\n * @example\n * Cesium.GeometryPipeline.computeTangentAndBiTangent(geometry);\n */\nGeometryPipeline.computeTangentAndBitangent = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n const attributes = geometry.attributes;\n const indices = geometry.indices;\n\n //>>includeStart('debug', pragmas.debug);\n if (!defined(attributes.position) || !defined(attributes.position.values)) {\n throw new DeveloperError(\n \"geometry.attributes.position.values is required.\"\n );\n }\n if (!defined(attributes.normal) || !defined(attributes.normal.values)) {\n throw new DeveloperError(\"geometry.attributes.normal.values is required.\");\n }\n if (!defined(attributes.st) || !defined(attributes.st.values)) {\n throw new DeveloperError(\"geometry.attributes.st.values is required.\");\n }\n if (!defined(indices)) {\n throw new DeveloperError(\"geometry.indices is required.\");\n }\n if (indices.length < 2 || indices.length % 3 !== 0) {\n throw new DeveloperError(\n \"geometry.indices length must be greater than 0 and be a multiple of 3.\"\n );\n }\n if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\n throw new DeveloperError(\n \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\"\n );\n }\n //>>includeEnd('debug');\n\n const vertices = geometry.attributes.position.values;\n const normals = geometry.attributes.normal.values;\n const st = geometry.attributes.st.values;\n\n const numVertices = geometry.attributes.position.values.length / 3;\n const numIndices = indices.length;\n const tan1 = new Array(numVertices * 3);\n\n let i;\n for (i = 0; i < tan1.length; i++) {\n tan1[i] = 0;\n }\n\n let i03;\n let i13;\n let i23;\n for (i = 0; i < numIndices; i += 3) {\n const i0 = indices[i];\n const i1 = indices[i + 1];\n const i2 = indices[i + 2];\n i03 = i0 * 3;\n i13 = i1 * 3;\n i23 = i2 * 3;\n const i02 = i0 * 2;\n const i12 = i1 * 2;\n const i22 = i2 * 2;\n\n const ux = vertices[i03];\n const uy = vertices[i03 + 1];\n const uz = vertices[i03 + 2];\n\n const wx = st[i02];\n const wy = st[i02 + 1];\n const t1 = st[i12 + 1] - wy;\n const t2 = st[i22 + 1] - wy;\n\n const r = 1.0 / ((st[i12] - wx) * t2 - (st[i22] - wx) * t1);\n const sdirx = (t2 * (vertices[i13] - ux) - t1 * (vertices[i23] - ux)) * r;\n const sdiry =\n (t2 * (vertices[i13 + 1] - uy) - t1 * (vertices[i23 + 1] - uy)) * r;\n const sdirz =\n (t2 * (vertices[i13 + 2] - uz) - t1 * (vertices[i23 + 2] - uz)) * r;\n\n tan1[i03] += sdirx;\n tan1[i03 + 1] += sdiry;\n tan1[i03 + 2] += sdirz;\n\n tan1[i13] += sdirx;\n tan1[i13 + 1] += sdiry;\n tan1[i13 + 2] += sdirz;\n\n tan1[i23] += sdirx;\n tan1[i23 + 1] += sdiry;\n tan1[i23 + 2] += sdirz;\n }\n\n const tangentValues = new Float32Array(numVertices * 3);\n const bitangentValues = new Float32Array(numVertices * 3);\n\n for (i = 0; i < numVertices; i++) {\n i03 = i * 3;\n i13 = i03 + 1;\n i23 = i03 + 2;\n\n const n = Cartesian3.fromArray(normals, i03, normalScratch);\n const t = Cartesian3.fromArray(tan1, i03, tScratch);\n const scalar = Cartesian3.dot(n, t);\n Cartesian3.multiplyByScalar(n, scalar, normalScale);\n Cartesian3.normalize(Cartesian3.subtract(t, normalScale, t), t);\n\n tangentValues[i03] = t.x;\n tangentValues[i13] = t.y;\n tangentValues[i23] = t.z;\n\n Cartesian3.normalize(Cartesian3.cross(n, t, t), t);\n\n bitangentValues[i03] = t.x;\n bitangentValues[i13] = t.y;\n bitangentValues[i23] = t.z;\n }\n\n geometry.attributes.tangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: tangentValues,\n });\n\n geometry.attributes.bitangent = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 3,\n values: bitangentValues,\n });\n\n return geometry;\n};\n\nconst scratchCartesian2 = new Cartesian2();\nconst toEncode1 = new Cartesian3();\nconst toEncode2 = new Cartesian3();\nconst toEncode3 = new Cartesian3();\nlet encodeResult2 = new Cartesian2();\n/**\n * Compresses and packs geometry normal attribute values to save memory.\n *\n * @param {Geometry} geometry The geometry to modify.\n * @returns {Geometry} The modified geometry argument, with its normals compressed and packed.\n *\n * @example\n * geometry = Cesium.GeometryPipeline.compressVertices(geometry);\n */\nGeometryPipeline.compressVertices = function (geometry) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(geometry)) {\n throw new DeveloperError(\"geometry is required.\");\n }\n //>>includeEnd('debug');\n\n const extrudeAttribute = geometry.attributes.extrudeDirection;\n let i;\n let numVertices;\n if (defined(extrudeAttribute)) {\n //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes\n const extrudeDirections = extrudeAttribute.values;\n numVertices = extrudeDirections.length / 3.0;\n const compressedDirections = new Float32Array(numVertices * 2);\n\n let i2 = 0;\n for (i = 0; i < numVertices; ++i) {\n Cartesian3.fromArray(extrudeDirections, i * 3.0, toEncode1);\n if (Cartesian3.equals(toEncode1, Cartesian3.ZERO)) {\n i2 += 2;\n continue;\n }\n encodeResult2 = AttributeCompression.octEncodeInRange(\n toEncode1,\n 65535,\n encodeResult2\n );\n compressedDirections[i2++] = encodeResult2.x;\n compressedDirections[i2++] = encodeResult2.y;\n }\n\n geometry.attributes.compressedAttributes = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: 2,\n values: compressedDirections,\n });\n delete geometry.attributes.extrudeDirection;\n return geometry;\n }\n\n const normalAttribute = geometry.attributes.normal;\n const stAttribute = geometry.attributes.st;\n\n const hasNormal = defined(normalAttribute);\n const hasSt = defined(stAttribute);\n if (!hasNormal && !hasSt) {\n return geometry;\n }\n\n const tangentAttribute = geometry.attributes.tangent;\n const bitangentAttribute = geometry.attributes.bitangent;\n\n const hasTangent = defined(tangentAttribute);\n const hasBitangent = defined(bitangentAttribute);\n\n let normals;\n let st;\n let tangents;\n let bitangents;\n\n if (hasNormal) {\n normals = normalAttribute.values;\n }\n if (hasSt) {\n st = stAttribute.values;\n }\n if (hasTangent) {\n tangents = tangentAttribute.values;\n }\n if (hasBitangent) {\n bitangents = bitangentAttribute.values;\n }\n\n const length = hasNormal ? normals.length : st.length;\n const numComponents = hasNormal ? 3.0 : 2.0;\n numVertices = length / numComponents;\n\n let compressedLength = numVertices;\n let numCompressedComponents = hasSt && hasNormal ? 2.0 : 1.0;\n numCompressedComponents += hasTangent || hasBitangent ? 1.0 : 0.0;\n compressedLength *= numCompressedComponents;\n\n const compressedAttributes = new Float32Array(compressedLength);\n\n let normalIndex = 0;\n for (i = 0; i < numVertices; ++i) {\n if (hasSt) {\n Cartesian2.fromArray(st, i * 2.0, scratchCartesian2);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.compressTextureCoordinates(scratchCartesian2);\n }\n\n const index = i * 3.0;\n if (hasNormal && defined(tangents) && defined(bitangents)) {\n Cartesian3.fromArray(normals, index, toEncode1);\n Cartesian3.fromArray(tangents, index, toEncode2);\n Cartesian3.fromArray(bitangents, index, toEncode3);\n\n AttributeCompression.octPack(\n toEncode1,\n toEncode2,\n toEncode3,\n scratchCartesian2\n );\n compressedAttributes[normalIndex++] = scratchCartesian2.x;\n compressedAttributes[normalIndex++] = scratchCartesian2.y;\n } else {\n if (hasNormal) {\n Cartesian3.fromArray(normals, index, toEncode1);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.octEncodeFloat(toEncode1);\n }\n\n if (hasTangent) {\n Cartesian3.fromArray(tangents, index, toEncode1);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.octEncodeFloat(toEncode1);\n }\n\n if (hasBitangent) {\n Cartesian3.fromArray(bitangents, index, toEncode1);\n compressedAttributes[\n normalIndex++\n ] = AttributeCompression.octEncodeFloat(toEncode1);\n }\n }\n }\n\n geometry.attributes.compressedAttributes = new GeometryAttribute({\n componentDatatype: ComponentDatatype.FLOAT,\n componentsPerAttribute: numCompressedComponents,\n values: compressedAttributes,\n });\n\n if (hasNormal) {\n delete geometry.attributes.normal;\n }\n if (hasSt) {\n delete geometry.attributes.st;\n }\n if (hasBitangent) {\n delete geometry.attributes.bitangent;\n }\n if (hasTangent) {\n delete geometry.attributes.tangent;\n }\n\n return geometry;\n};\n\nfunction indexTriangles(geometry) {\n if (defined(geometry.indices)) {\n return geometry;\n }\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 3) {\n throw new DeveloperError(\"The number of vertices must be at least three.\");\n }\n if (numberOfVertices % 3 !== 0) {\n throw new DeveloperError(\n \"The number of vertices must be a multiple of three.\"\n );\n }\n //>>includeEnd('debug');\n\n const indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfVertices\n );\n for (let i = 0; i < numberOfVertices; ++i) {\n indices[i] = i;\n }\n\n geometry.indices = indices;\n return geometry;\n}\n\nfunction indexTriangleFan(geometry) {\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 3) {\n throw new DeveloperError(\"The number of vertices must be at least three.\");\n }\n //>>includeEnd('debug');\n\n const indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n (numberOfVertices - 2) * 3\n );\n indices[0] = 1;\n indices[1] = 0;\n indices[2] = 2;\n\n let indicesIndex = 3;\n for (let i = 3; i < numberOfVertices; ++i) {\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = 0;\n indices[indicesIndex++] = i;\n }\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.TRIANGLES;\n return geometry;\n}\n\nfunction indexTriangleStrip(geometry) {\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 3) {\n throw new DeveloperError(\"The number of vertices must be at least 3.\");\n }\n //>>includeEnd('debug');\n\n const indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n (numberOfVertices - 2) * 3\n );\n indices[0] = 0;\n indices[1] = 1;\n indices[2] = 2;\n\n if (numberOfVertices > 3) {\n indices[3] = 0;\n indices[4] = 2;\n indices[5] = 3;\n }\n\n let indicesIndex = 6;\n for (let i = 3; i < numberOfVertices - 1; i += 2) {\n indices[indicesIndex++] = i;\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = i + 1;\n\n if (i + 2 < numberOfVertices) {\n indices[indicesIndex++] = i;\n indices[indicesIndex++] = i + 1;\n indices[indicesIndex++] = i + 2;\n }\n }\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.TRIANGLES;\n return geometry;\n}\n\nfunction indexLines(geometry) {\n if (defined(geometry.indices)) {\n return geometry;\n }\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 2) {\n throw new DeveloperError(\"The number of vertices must be at least two.\");\n }\n if (numberOfVertices % 2 !== 0) {\n throw new DeveloperError(\"The number of vertices must be a multiple of 2.\");\n }\n //>>includeEnd('debug');\n\n const indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfVertices\n );\n for (let i = 0; i < numberOfVertices; ++i) {\n indices[i] = i;\n }\n\n geometry.indices = indices;\n return geometry;\n}\n\nfunction indexLineStrip(geometry) {\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 2) {\n throw new DeveloperError(\"The number of vertices must be at least two.\");\n }\n //>>includeEnd('debug');\n\n const indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n (numberOfVertices - 1) * 2\n );\n indices[0] = 0;\n indices[1] = 1;\n let indicesIndex = 2;\n for (let i = 2; i < numberOfVertices; ++i) {\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = i;\n }\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.LINES;\n return geometry;\n}\n\nfunction indexLineLoop(geometry) {\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n\n //>>includeStart('debug', pragmas.debug);\n if (numberOfVertices < 2) {\n throw new DeveloperError(\"The number of vertices must be at least two.\");\n }\n //>>includeEnd('debug');\n\n const indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n numberOfVertices * 2\n );\n\n indices[0] = 0;\n indices[1] = 1;\n\n let indicesIndex = 2;\n for (let i = 2; i < numberOfVertices; ++i) {\n indices[indicesIndex++] = i - 1;\n indices[indicesIndex++] = i;\n }\n\n indices[indicesIndex++] = numberOfVertices - 1;\n indices[indicesIndex] = 0;\n\n geometry.indices = indices;\n geometry.primitiveType = PrimitiveType.LINES;\n return geometry;\n}\n\nfunction indexPrimitive(geometry) {\n switch (geometry.primitiveType) {\n case PrimitiveType.TRIANGLE_FAN:\n return indexTriangleFan(geometry);\n case PrimitiveType.TRIANGLE_STRIP:\n return indexTriangleStrip(geometry);\n case PrimitiveType.TRIANGLES:\n return indexTriangles(geometry);\n case PrimitiveType.LINE_STRIP:\n return indexLineStrip(geometry);\n case PrimitiveType.LINE_LOOP:\n return indexLineLoop(geometry);\n case PrimitiveType.LINES:\n return indexLines(geometry);\n }\n\n return geometry;\n}\n\nfunction offsetPointFromXZPlane(p, isBehind) {\n if (Math.abs(p.y) < CesiumMath.EPSILON6) {\n if (isBehind) {\n p.y = -CesiumMath.EPSILON6;\n } else {\n p.y = CesiumMath.EPSILON6;\n }\n }\n}\n\nfunction offsetTriangleFromXZPlane(p0, p1, p2) {\n if (p0.y !== 0.0 && p1.y !== 0.0 && p2.y !== 0.0) {\n offsetPointFromXZPlane(p0, p0.y < 0.0);\n offsetPointFromXZPlane(p1, p1.y < 0.0);\n offsetPointFromXZPlane(p2, p2.y < 0.0);\n return;\n }\n\n const p0y = Math.abs(p0.y);\n const p1y = Math.abs(p1.y);\n const p2y = Math.abs(p2.y);\n\n let sign;\n if (p0y > p1y) {\n if (p0y > p2y) {\n sign = CesiumMath.sign(p0.y);\n } else {\n sign = CesiumMath.sign(p2.y);\n }\n } else if (p1y > p2y) {\n sign = CesiumMath.sign(p1.y);\n } else {\n sign = CesiumMath.sign(p2.y);\n }\n\n const isBehind = sign < 0.0;\n offsetPointFromXZPlane(p0, isBehind);\n offsetPointFromXZPlane(p1, isBehind);\n offsetPointFromXZPlane(p2, isBehind);\n}\n\nconst c3 = new Cartesian3();\nfunction getXZIntersectionOffsetPoints(p, p1, u1, v1) {\n Cartesian3.add(\n p,\n Cartesian3.multiplyByScalar(\n Cartesian3.subtract(p1, p, c3),\n p.y / (p.y - p1.y),\n c3\n ),\n u1\n );\n Cartesian3.clone(u1, v1);\n offsetPointFromXZPlane(u1, true);\n offsetPointFromXZPlane(v1, false);\n}\n\nconst u1 = new Cartesian3();\nconst u2 = new Cartesian3();\nconst q1 = new Cartesian3();\nconst q2 = new Cartesian3();\n\nconst splitTriangleResult = {\n positions: new Array(7),\n indices: new Array(3 * 3),\n};\n\nfunction splitTriangle(p0, p1, p2) {\n // In WGS84 coordinates, for a triangle approximately on the\n // ellipsoid to cross the IDL, first it needs to be on the\n // negative side of the plane x = 0.\n if (p0.x >= 0.0 || p1.x >= 0.0 || p2.x >= 0.0) {\n return undefined;\n }\n\n offsetTriangleFromXZPlane(p0, p1, p2);\n\n const p0Behind = p0.y < 0.0;\n const p1Behind = p1.y < 0.0;\n const p2Behind = p2.y < 0.0;\n\n let numBehind = 0;\n numBehind += p0Behind ? 1 : 0;\n numBehind += p1Behind ? 1 : 0;\n numBehind += p2Behind ? 1 : 0;\n\n const indices = splitTriangleResult.indices;\n\n if (numBehind === 1) {\n indices[1] = 3;\n indices[2] = 4;\n indices[5] = 6;\n indices[7] = 6;\n indices[8] = 5;\n\n if (p0Behind) {\n getXZIntersectionOffsetPoints(p0, p1, u1, q1);\n getXZIntersectionOffsetPoints(p0, p2, u2, q2);\n\n indices[0] = 0;\n indices[3] = 1;\n indices[4] = 2;\n indices[6] = 1;\n } else if (p1Behind) {\n getXZIntersectionOffsetPoints(p1, p2, u1, q1);\n getXZIntersectionOffsetPoints(p1, p0, u2, q2);\n\n indices[0] = 1;\n indices[3] = 2;\n indices[4] = 0;\n indices[6] = 2;\n } else if (p2Behind) {\n getXZIntersectionOffsetPoints(p2, p0, u1, q1);\n getXZIntersectionOffsetPoints(p2, p1, u2, q2);\n\n indices[0] = 2;\n indices[3] = 0;\n indices[4] = 1;\n indices[6] = 0;\n }\n } else if (numBehind === 2) {\n indices[2] = 4;\n indices[4] = 4;\n indices[5] = 3;\n indices[7] = 5;\n indices[8] = 6;\n\n if (!p0Behind) {\n getXZIntersectionOffsetPoints(p0, p1, u1, q1);\n getXZIntersectionOffsetPoints(p0, p2, u2, q2);\n\n indices[0] = 1;\n indices[1] = 2;\n indices[3] = 1;\n indices[6] = 0;\n } else if (!p1Behind) {\n getXZIntersectionOffsetPoints(p1, p2, u1, q1);\n getXZIntersectionOffsetPoints(p1, p0, u2, q2);\n\n indices[0] = 2;\n indices[1] = 0;\n indices[3] = 2;\n indices[6] = 1;\n } else if (!p2Behind) {\n getXZIntersectionOffsetPoints(p2, p0, u1, q1);\n getXZIntersectionOffsetPoints(p2, p1, u2, q2);\n\n indices[0] = 0;\n indices[1] = 1;\n indices[3] = 0;\n indices[6] = 2;\n }\n }\n\n const positions = splitTriangleResult.positions;\n positions[0] = p0;\n positions[1] = p1;\n positions[2] = p2;\n positions.length = 3;\n\n if (numBehind === 1 || numBehind === 2) {\n positions[3] = u1;\n positions[4] = u2;\n positions[5] = q1;\n positions[6] = q2;\n positions.length = 7;\n }\n\n return splitTriangleResult;\n}\n\nfunction updateGeometryAfterSplit(geometry, computeBoundingSphere) {\n const attributes = geometry.attributes;\n\n if (attributes.position.values.length === 0) {\n return undefined;\n }\n\n for (const property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property]) &&\n defined(attributes[property].values)\n ) {\n const attribute = attributes[property];\n attribute.values = ComponentDatatype.createTypedArray(\n attribute.componentDatatype,\n attribute.values\n );\n }\n }\n\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\n geometry.indices = IndexDatatype.createTypedArray(\n numberOfVertices,\n geometry.indices\n );\n\n if (computeBoundingSphere) {\n geometry.boundingSphere = BoundingSphere.fromVertices(\n attributes.position.values\n );\n }\n\n return geometry;\n}\n\nfunction copyGeometryForSplit(geometry) {\n const attributes = geometry.attributes;\n const copiedAttributes = {};\n\n for (const property in attributes) {\n if (\n attributes.hasOwnProperty(property) &&\n defined(attributes[property]) &&\n defined(attributes[property].values)\n ) {\n const attribute = attributes[property];\n copiedAttributes[property] = new GeometryAttribute({\n componentDatatype: attribute.componentDatatype,\n componentsPerAttribute: attribute.componentsPerAttribute,\n normalize: attribute.normalize,\n values: [],\n });\n }\n }\n\n return new Geometry({\n attributes: copiedAttributes,\n indices: [],\n primitiveType: geometry.primitiveType,\n });\n}\n\nfunction updateInstanceAfterSplit(instance, westGeometry, eastGeometry) {\n const computeBoundingSphere = defined(instance.geometry.boundingSphere);\n\n westGeometry = updateGeometryAfterSplit(westGeometry, computeBoundingSphere);\n eastGeometry = updateGeometryAfterSplit(eastGeometry, computeBoundingSphere);\n\n if (defined(eastGeometry) && !defined(westGeometry)) {\n instance.geometry = eastGeometry;\n } else if (!defined(eastGeometry) && defined(westGeometry)) {\n instance.geometry = westGeometry;\n } else {\n instance.westHemisphereGeometry = westGeometry;\n instance.eastHemisphereGeometry = eastGeometry;\n instance.geometry = undefined;\n }\n}\n\nfunction generateBarycentricInterpolateFunction(\n CartesianType,\n numberOfComponents\n) {\n const v0Scratch = new CartesianType();\n const v1Scratch = new CartesianType();\n const v2Scratch = new CartesianType();\n\n return function (\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n normalize\n ) {\n const v0 = CartesianType.fromArray(\n sourceValues,\n i0 * numberOfComponents,\n v0Scratch\n );\n const v1 = CartesianType.fromArray(\n sourceValues,\n i1 * numberOfComponents,\n v1Scratch\n );\n const v2 = CartesianType.fromArray(\n sourceValues,\n i2 * numberOfComponents,\n v2Scratch\n );\n\n CartesianType.multiplyByScalar(v0, coords.x, v0);\n CartesianType.multiplyByScalar(v1, coords.y, v1);\n CartesianType.multiplyByScalar(v2, coords.z, v2);\n\n const value = CartesianType.add(v0, v1, v0);\n CartesianType.add(value, v2, value);\n\n if (normalize) {\n CartesianType.normalize(value, value);\n }\n\n CartesianType.pack(\n value,\n currentValues,\n insertedIndex * numberOfComponents\n );\n };\n}\n\nconst interpolateAndPackCartesian4 = generateBarycentricInterpolateFunction(\n Cartesian4,\n 4\n);\nconst interpolateAndPackCartesian3 = generateBarycentricInterpolateFunction(\n Cartesian3,\n 3\n);\nconst interpolateAndPackCartesian2 = generateBarycentricInterpolateFunction(\n Cartesian2,\n 2\n);\nconst interpolateAndPackBoolean = function (\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex\n) {\n const v1 = sourceValues[i0] * coords.x;\n const v2 = sourceValues[i1] * coords.y;\n const v3 = sourceValues[i2] * coords.z;\n currentValues[insertedIndex] = v1 + v2 + v3 > CesiumMath.EPSILON6 ? 1 : 0;\n};\n\nconst p0Scratch = new Cartesian3();\nconst p1Scratch = new Cartesian3();\nconst p2Scratch = new Cartesian3();\nconst barycentricScratch = new Cartesian3();\n\nfunction computeTriangleAttributes(\n i0,\n i1,\n i2,\n point,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n allAttributes,\n insertedIndex\n) {\n if (\n !defined(normals) &&\n !defined(tangents) &&\n !defined(bitangents) &&\n !defined(texCoords) &&\n !defined(extrudeDirections) &&\n customAttributesLength === 0\n ) {\n return;\n }\n\n const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n const p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\n const p2 = Cartesian3.fromArray(positions, i2 * 3, p2Scratch);\n const coords = barycentricCoordinates(point, p0, p1, p2, barycentricScratch);\n if (!defined(coords)) {\n return;\n }\n\n if (defined(normals)) {\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n normals,\n currentAttributes.normal.values,\n insertedIndex,\n true\n );\n }\n\n if (defined(extrudeDirections)) {\n const d0 = Cartesian3.fromArray(extrudeDirections, i0 * 3, p0Scratch);\n const d1 = Cartesian3.fromArray(extrudeDirections, i1 * 3, p1Scratch);\n const d2 = Cartesian3.fromArray(extrudeDirections, i2 * 3, p2Scratch);\n\n Cartesian3.multiplyByScalar(d0, coords.x, d0);\n Cartesian3.multiplyByScalar(d1, coords.y, d1);\n Cartesian3.multiplyByScalar(d2, coords.z, d2);\n\n let direction;\n if (\n !Cartesian3.equals(d0, Cartesian3.ZERO) ||\n !Cartesian3.equals(d1, Cartesian3.ZERO) ||\n !Cartesian3.equals(d2, Cartesian3.ZERO)\n ) {\n direction = Cartesian3.add(d0, d1, d0);\n Cartesian3.add(direction, d2, direction);\n Cartesian3.normalize(direction, direction);\n } else {\n direction = p0Scratch;\n direction.x = 0;\n direction.y = 0;\n direction.z = 0;\n }\n Cartesian3.pack(\n direction,\n currentAttributes.extrudeDirection.values,\n insertedIndex * 3\n );\n }\n\n if (defined(applyOffset)) {\n interpolateAndPackBoolean(\n i0,\n i1,\n i2,\n coords,\n applyOffset,\n currentAttributes.applyOffset.values,\n insertedIndex\n );\n }\n\n if (defined(tangents)) {\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n tangents,\n currentAttributes.tangent.values,\n insertedIndex,\n true\n );\n }\n\n if (defined(bitangents)) {\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n bitangents,\n currentAttributes.bitangent.values,\n insertedIndex,\n true\n );\n }\n\n if (defined(texCoords)) {\n interpolateAndPackCartesian2(\n i0,\n i1,\n i2,\n coords,\n texCoords,\n currentAttributes.st.values,\n insertedIndex\n );\n }\n\n if (customAttributesLength > 0) {\n for (let i = 0; i < customAttributesLength; i++) {\n const attributeName = customAttributeNames[i];\n genericInterpolate(\n i0,\n i1,\n i2,\n coords,\n insertedIndex,\n allAttributes[attributeName],\n currentAttributes[attributeName]\n );\n }\n }\n}\n\nfunction genericInterpolate(\n i0,\n i1,\n i2,\n coords,\n insertedIndex,\n sourceAttribute,\n currentAttribute\n) {\n const componentsPerAttribute = sourceAttribute.componentsPerAttribute;\n const sourceValues = sourceAttribute.values;\n const currentValues = currentAttribute.values;\n switch (componentsPerAttribute) {\n case 4:\n interpolateAndPackCartesian4(\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n false\n );\n break;\n case 3:\n interpolateAndPackCartesian3(\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n false\n );\n break;\n case 2:\n interpolateAndPackCartesian2(\n i0,\n i1,\n i2,\n coords,\n sourceValues,\n currentValues,\n insertedIndex,\n false\n );\n break;\n default:\n currentValues[insertedIndex] =\n sourceValues[i0] * coords.x +\n sourceValues[i1] * coords.y +\n sourceValues[i2] * coords.z;\n }\n}\n\nfunction insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n currentIndex,\n point\n) {\n const insertIndex = currentAttributes.position.values.length / 3;\n\n if (currentIndex !== -1) {\n const prevIndex = indices[currentIndex];\n const newIndex = currentIndexMap[prevIndex];\n\n if (newIndex === -1) {\n currentIndexMap[prevIndex] = insertIndex;\n currentAttributes.position.values.push(point.x, point.y, point.z);\n currentIndices.push(insertIndex);\n return insertIndex;\n }\n\n currentIndices.push(newIndex);\n return newIndex;\n }\n\n currentAttributes.position.values.push(point.x, point.y, point.z);\n currentIndices.push(insertIndex);\n return insertIndex;\n}\n\nconst NAMED_ATTRIBUTES = {\n position: true,\n normal: true,\n bitangent: true,\n tangent: true,\n st: true,\n extrudeDirection: true,\n applyOffset: true,\n};\nfunction splitLongitudeTriangles(instance) {\n const geometry = instance.geometry;\n const attributes = geometry.attributes;\n const positions = attributes.position.values;\n const normals = defined(attributes.normal)\n ? attributes.normal.values\n : undefined;\n const bitangents = defined(attributes.bitangent)\n ? attributes.bitangent.values\n : undefined;\n const tangents = defined(attributes.tangent)\n ? attributes.tangent.values\n : undefined;\n const texCoords = defined(attributes.st) ? attributes.st.values : undefined;\n const extrudeDirections = defined(attributes.extrudeDirection)\n ? attributes.extrudeDirection.values\n : undefined;\n const applyOffset = defined(attributes.applyOffset)\n ? attributes.applyOffset.values\n : undefined;\n const indices = geometry.indices;\n\n const customAttributeNames = [];\n for (const attributeName in attributes) {\n if (\n attributes.hasOwnProperty(attributeName) &&\n !NAMED_ATTRIBUTES[attributeName] &&\n defined(attributes[attributeName])\n ) {\n customAttributeNames.push(attributeName);\n }\n }\n const customAttributesLength = customAttributeNames.length;\n\n const eastGeometry = copyGeometryForSplit(geometry);\n const westGeometry = copyGeometryForSplit(geometry);\n\n let currentAttributes;\n let currentIndices;\n let currentIndexMap;\n let insertedIndex;\n let i;\n\n const westGeometryIndexMap = [];\n westGeometryIndexMap.length = positions.length / 3;\n\n const eastGeometryIndexMap = [];\n eastGeometryIndexMap.length = positions.length / 3;\n\n for (i = 0; i < westGeometryIndexMap.length; ++i) {\n westGeometryIndexMap[i] = -1;\n eastGeometryIndexMap[i] = -1;\n }\n\n const len = indices.length;\n for (i = 0; i < len; i += 3) {\n const i0 = indices[i];\n const i1 = indices[i + 1];\n const i2 = indices[i + 2];\n\n let p0 = Cartesian3.fromArray(positions, i0 * 3);\n let p1 = Cartesian3.fromArray(positions, i1 * 3);\n let p2 = Cartesian3.fromArray(positions, i2 * 3);\n\n const result = splitTriangle(p0, p1, p2);\n if (defined(result) && result.positions.length > 3) {\n const resultPositions = result.positions;\n const resultIndices = result.indices;\n const resultLength = resultIndices.length;\n\n for (let j = 0; j < resultLength; ++j) {\n const resultIndex = resultIndices[j];\n const point = resultPositions[resultIndex];\n\n if (point.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n currentIndexMap = westGeometryIndexMap;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n currentIndexMap = eastGeometryIndexMap;\n }\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n resultIndex < 3 ? i + resultIndex : -1,\n point\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n point,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n }\n } else {\n if (defined(result)) {\n p0 = result.positions[0];\n p1 = result.positions[1];\n p2 = result.positions[2];\n }\n\n if (p0.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n currentIndexMap = westGeometryIndexMap;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n currentIndexMap = eastGeometryIndexMap;\n }\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i,\n p0\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n p0,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i + 1,\n p1\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n p1,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n\n insertedIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i + 2,\n p2\n );\n computeTriangleAttributes(\n i0,\n i1,\n i2,\n p2,\n positions,\n normals,\n tangents,\n bitangents,\n texCoords,\n extrudeDirections,\n applyOffset,\n currentAttributes,\n customAttributeNames,\n customAttributesLength,\n attributes,\n insertedIndex\n );\n }\n }\n\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\nconst xzPlane = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\n\nconst offsetScratch = new Cartesian3();\nconst offsetPointScratch = new Cartesian3();\n\nfunction computeLineAttributes(\n i0,\n i1,\n point,\n positions,\n insertIndex,\n currentAttributes,\n applyOffset\n) {\n if (!defined(applyOffset)) {\n return;\n }\n\n const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n if (Cartesian3.equalsEpsilon(p0, point, CesiumMath.EPSILON10)) {\n currentAttributes.applyOffset.values[insertIndex] = applyOffset[i0];\n } else {\n currentAttributes.applyOffset.values[insertIndex] = applyOffset[i1];\n }\n}\n\nfunction splitLongitudeLines(instance) {\n const geometry = instance.geometry;\n const attributes = geometry.attributes;\n const positions = attributes.position.values;\n const applyOffset = defined(attributes.applyOffset)\n ? attributes.applyOffset.values\n : undefined;\n const indices = geometry.indices;\n\n const eastGeometry = copyGeometryForSplit(geometry);\n const westGeometry = copyGeometryForSplit(geometry);\n\n let i;\n const length = indices.length;\n\n const westGeometryIndexMap = [];\n westGeometryIndexMap.length = positions.length / 3;\n\n const eastGeometryIndexMap = [];\n eastGeometryIndexMap.length = positions.length / 3;\n\n for (i = 0; i < westGeometryIndexMap.length; ++i) {\n westGeometryIndexMap[i] = -1;\n eastGeometryIndexMap[i] = -1;\n }\n\n for (i = 0; i < length; i += 2) {\n const i0 = indices[i];\n const i1 = indices[i + 1];\n\n const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\n const p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\n let insertIndex;\n\n if (Math.abs(p0.y) < CesiumMath.EPSILON6) {\n if (p0.y < 0.0) {\n p0.y = -CesiumMath.EPSILON6;\n } else {\n p0.y = CesiumMath.EPSILON6;\n }\n }\n\n if (Math.abs(p1.y) < CesiumMath.EPSILON6) {\n if (p1.y < 0.0) {\n p1.y = -CesiumMath.EPSILON6;\n } else {\n p1.y = CesiumMath.EPSILON6;\n }\n }\n\n let p0Attributes = eastGeometry.attributes;\n let p0Indices = eastGeometry.indices;\n let p0IndexMap = eastGeometryIndexMap;\n let p1Attributes = westGeometry.attributes;\n let p1Indices = westGeometry.indices;\n let p1IndexMap = westGeometryIndexMap;\n\n const intersection = IntersectionTests.lineSegmentPlane(\n p0,\n p1,\n xzPlane,\n p2Scratch\n );\n if (defined(intersection)) {\n // move point on the xz-plane slightly away from the plane\n const offset = Cartesian3.multiplyByScalar(\n Cartesian3.UNIT_Y,\n 5.0 * CesiumMath.EPSILON9,\n offsetScratch\n );\n if (p0.y < 0.0) {\n Cartesian3.negate(offset, offset);\n\n p0Attributes = westGeometry.attributes;\n p0Indices = westGeometry.indices;\n p0IndexMap = westGeometryIndexMap;\n p1Attributes = eastGeometry.attributes;\n p1Indices = eastGeometry.indices;\n p1IndexMap = eastGeometryIndexMap;\n }\n\n const offsetPoint = Cartesian3.add(\n intersection,\n offset,\n offsetPointScratch\n );\n\n insertIndex = insertSplitPoint(\n p0Attributes,\n p0Indices,\n p0IndexMap,\n indices,\n i,\n p0\n );\n computeLineAttributes(\n i0,\n i1,\n p0,\n positions,\n insertIndex,\n p0Attributes,\n applyOffset\n );\n\n insertIndex = insertSplitPoint(\n p0Attributes,\n p0Indices,\n p0IndexMap,\n indices,\n -1,\n offsetPoint\n );\n computeLineAttributes(\n i0,\n i1,\n offsetPoint,\n positions,\n insertIndex,\n p0Attributes,\n applyOffset\n );\n\n Cartesian3.negate(offset, offset);\n Cartesian3.add(intersection, offset, offsetPoint);\n insertIndex = insertSplitPoint(\n p1Attributes,\n p1Indices,\n p1IndexMap,\n indices,\n -1,\n offsetPoint\n );\n computeLineAttributes(\n i0,\n i1,\n offsetPoint,\n positions,\n insertIndex,\n p1Attributes,\n applyOffset\n );\n\n insertIndex = insertSplitPoint(\n p1Attributes,\n p1Indices,\n p1IndexMap,\n indices,\n i + 1,\n p1\n );\n computeLineAttributes(\n i0,\n i1,\n p1,\n positions,\n insertIndex,\n p1Attributes,\n applyOffset\n );\n } else {\n let currentAttributes;\n let currentIndices;\n let currentIndexMap;\n\n if (p0.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n currentIndexMap = westGeometryIndexMap;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n currentIndexMap = eastGeometryIndexMap;\n }\n\n insertIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i,\n p0\n );\n computeLineAttributes(\n i0,\n i1,\n p0,\n positions,\n insertIndex,\n currentAttributes,\n applyOffset\n );\n\n insertIndex = insertSplitPoint(\n currentAttributes,\n currentIndices,\n currentIndexMap,\n indices,\n i + 1,\n p1\n );\n computeLineAttributes(\n i0,\n i1,\n p1,\n positions,\n insertIndex,\n currentAttributes,\n applyOffset\n );\n }\n }\n\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\nconst cartesian2Scratch0 = new Cartesian2();\nconst cartesian2Scratch1 = new Cartesian2();\n\nconst cartesian3Scratch0 = new Cartesian3();\nconst cartesian3Scratch2 = new Cartesian3();\nconst cartesian3Scratch3 = new Cartesian3();\nconst cartesian3Scratch4 = new Cartesian3();\nconst cartesian3Scratch5 = new Cartesian3();\nconst cartesian3Scratch6 = new Cartesian3();\n\nconst cartesian4Scratch0 = new Cartesian4();\n\nfunction updateAdjacencyAfterSplit(geometry) {\n const attributes = geometry.attributes;\n const positions = attributes.position.values;\n const prevPositions = attributes.prevPosition.values;\n const nextPositions = attributes.nextPosition.values;\n\n const length = positions.length;\n for (let j = 0; j < length; j += 3) {\n const position = Cartesian3.unpack(positions, j, cartesian3Scratch0);\n if (position.x > 0.0) {\n continue;\n }\n\n const prevPosition = Cartesian3.unpack(\n prevPositions,\n j,\n cartesian3Scratch2\n );\n if (\n (position.y < 0.0 && prevPosition.y > 0.0) ||\n (position.y > 0.0 && prevPosition.y < 0.0)\n ) {\n if (j - 3 > 0) {\n prevPositions[j] = positions[j - 3];\n prevPositions[j + 1] = positions[j - 2];\n prevPositions[j + 2] = positions[j - 1];\n } else {\n Cartesian3.pack(position, prevPositions, j);\n }\n }\n\n const nextPosition = Cartesian3.unpack(\n nextPositions,\n j,\n cartesian3Scratch3\n );\n if (\n (position.y < 0.0 && nextPosition.y > 0.0) ||\n (position.y > 0.0 && nextPosition.y < 0.0)\n ) {\n if (j + 3 < length) {\n nextPositions[j] = positions[j + 3];\n nextPositions[j + 1] = positions[j + 4];\n nextPositions[j + 2] = positions[j + 5];\n } else {\n Cartesian3.pack(position, nextPositions, j);\n }\n }\n }\n}\n\nconst offsetScalar = 5.0 * CesiumMath.EPSILON9;\nconst coplanarOffset = CesiumMath.EPSILON6;\n\nfunction splitLongitudePolyline(instance) {\n const geometry = instance.geometry;\n const attributes = geometry.attributes;\n const positions = attributes.position.values;\n const prevPositions = attributes.prevPosition.values;\n const nextPositions = attributes.nextPosition.values;\n const expandAndWidths = attributes.expandAndWidth.values;\n\n const texCoords = defined(attributes.st) ? attributes.st.values : undefined;\n const colors = defined(attributes.color)\n ? attributes.color.values\n : undefined;\n\n const eastGeometry = copyGeometryForSplit(geometry);\n const westGeometry = copyGeometryForSplit(geometry);\n\n let i;\n let j;\n let index;\n\n let intersectionFound = false;\n\n const length = positions.length / 3;\n for (i = 0; i < length; i += 4) {\n const i0 = i;\n const i2 = i + 2;\n\n const p0 = Cartesian3.fromArray(positions, i0 * 3, cartesian3Scratch0);\n const p2 = Cartesian3.fromArray(positions, i2 * 3, cartesian3Scratch2);\n\n // Offset points that are close to the 180 longitude and change the previous/next point\n // to be the same offset point so it can be projected to 2D. There is special handling in the\n // shader for when position == prevPosition || position == nextPosition.\n if (Math.abs(p0.y) < coplanarOffset) {\n p0.y = coplanarOffset * (p2.y < 0.0 ? -1.0 : 1.0);\n positions[i * 3 + 1] = p0.y;\n positions[(i + 1) * 3 + 1] = p0.y;\n\n for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\n prevPositions[j] = positions[i * 3];\n prevPositions[j + 1] = positions[i * 3 + 1];\n prevPositions[j + 2] = positions[i * 3 + 2];\n }\n }\n\n // Do the same but for when the line crosses 180 longitude in the opposite direction.\n if (Math.abs(p2.y) < coplanarOffset) {\n p2.y = coplanarOffset * (p0.y < 0.0 ? -1.0 : 1.0);\n positions[(i + 2) * 3 + 1] = p2.y;\n positions[(i + 3) * 3 + 1] = p2.y;\n\n for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\n nextPositions[j] = positions[(i + 2) * 3];\n nextPositions[j + 1] = positions[(i + 2) * 3 + 1];\n nextPositions[j + 2] = positions[(i + 2) * 3 + 2];\n }\n }\n\n let p0Attributes = eastGeometry.attributes;\n let p0Indices = eastGeometry.indices;\n let p2Attributes = westGeometry.attributes;\n let p2Indices = westGeometry.indices;\n\n const intersection = IntersectionTests.lineSegmentPlane(\n p0,\n p2,\n xzPlane,\n cartesian3Scratch4\n );\n if (defined(intersection)) {\n intersectionFound = true;\n\n // move point on the xz-plane slightly away from the plane\n const offset = Cartesian3.multiplyByScalar(\n Cartesian3.UNIT_Y,\n offsetScalar,\n cartesian3Scratch5\n );\n if (p0.y < 0.0) {\n Cartesian3.negate(offset, offset);\n p0Attributes = westGeometry.attributes;\n p0Indices = westGeometry.indices;\n p2Attributes = eastGeometry.attributes;\n p2Indices = eastGeometry.indices;\n }\n\n const offsetPoint = Cartesian3.add(\n intersection,\n offset,\n cartesian3Scratch6\n );\n p0Attributes.position.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\n p0Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n\n p0Attributes.prevPosition.values.push(\n prevPositions[i0 * 3],\n prevPositions[i0 * 3 + 1],\n prevPositions[i0 * 3 + 2]\n );\n p0Attributes.prevPosition.values.push(\n prevPositions[i0 * 3 + 3],\n prevPositions[i0 * 3 + 4],\n prevPositions[i0 * 3 + 5]\n );\n p0Attributes.prevPosition.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\n\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p0Attributes.nextPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n\n Cartesian3.negate(offset, offset);\n Cartesian3.add(intersection, offset, offsetPoint);\n p2Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.position.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.position.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\n\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n p2Attributes.prevPosition.values.push(\n offsetPoint.x,\n offsetPoint.y,\n offsetPoint.z\n );\n\n p2Attributes.nextPosition.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\n p2Attributes.nextPosition.values.push(\n nextPositions[i2 * 3],\n nextPositions[i2 * 3 + 1],\n nextPositions[i2 * 3 + 2]\n );\n p2Attributes.nextPosition.values.push(\n nextPositions[i2 * 3 + 3],\n nextPositions[i2 * 3 + 4],\n nextPositions[i2 * 3 + 5]\n );\n\n const ew0 = Cartesian2.fromArray(\n expandAndWidths,\n i0 * 2,\n cartesian2Scratch0\n );\n const width = Math.abs(ew0.y);\n\n p0Attributes.expandAndWidth.values.push(-1, width, 1, width);\n p0Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\n p2Attributes.expandAndWidth.values.push(-1, width, 1, width);\n p2Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\n\n let t = Cartesian3.magnitudeSquared(\n Cartesian3.subtract(intersection, p0, cartesian3Scratch3)\n );\n t /= Cartesian3.magnitudeSquared(\n Cartesian3.subtract(p2, p0, cartesian3Scratch3)\n );\n\n if (defined(colors)) {\n const c0 = Cartesian4.fromArray(colors, i0 * 4, cartesian4Scratch0);\n const c2 = Cartesian4.fromArray(colors, i2 * 4, cartesian4Scratch0);\n\n const r = CesiumMath.lerp(c0.x, c2.x, t);\n const g = CesiumMath.lerp(c0.y, c2.y, t);\n const b = CesiumMath.lerp(c0.z, c2.z, t);\n const a = CesiumMath.lerp(c0.w, c2.w, t);\n\n for (j = i0 * 4; j < i0 * 4 + 2 * 4; ++j) {\n p0Attributes.color.values.push(colors[j]);\n }\n p0Attributes.color.values.push(r, g, b, a);\n p0Attributes.color.values.push(r, g, b, a);\n p2Attributes.color.values.push(r, g, b, a);\n p2Attributes.color.values.push(r, g, b, a);\n for (j = i2 * 4; j < i2 * 4 + 2 * 4; ++j) {\n p2Attributes.color.values.push(colors[j]);\n }\n }\n\n if (defined(texCoords)) {\n const s0 = Cartesian2.fromArray(texCoords, i0 * 2, cartesian2Scratch0);\n const s3 = Cartesian2.fromArray(\n texCoords,\n (i + 3) * 2,\n cartesian2Scratch1\n );\n\n const sx = CesiumMath.lerp(s0.x, s3.x, t);\n\n for (j = i0 * 2; j < i0 * 2 + 2 * 2; ++j) {\n p0Attributes.st.values.push(texCoords[j]);\n }\n p0Attributes.st.values.push(sx, s0.y);\n p0Attributes.st.values.push(sx, s3.y);\n p2Attributes.st.values.push(sx, s0.y);\n p2Attributes.st.values.push(sx, s3.y);\n for (j = i2 * 2; j < i2 * 2 + 2 * 2; ++j) {\n p2Attributes.st.values.push(texCoords[j]);\n }\n }\n\n index = p0Attributes.position.values.length / 3 - 4;\n p0Indices.push(index, index + 2, index + 1);\n p0Indices.push(index + 1, index + 2, index + 3);\n\n index = p2Attributes.position.values.length / 3 - 4;\n p2Indices.push(index, index + 2, index + 1);\n p2Indices.push(index + 1, index + 2, index + 3);\n } else {\n let currentAttributes;\n let currentIndices;\n\n if (p0.y < 0.0) {\n currentAttributes = westGeometry.attributes;\n currentIndices = westGeometry.indices;\n } else {\n currentAttributes = eastGeometry.attributes;\n currentIndices = eastGeometry.indices;\n }\n\n currentAttributes.position.values.push(p0.x, p0.y, p0.z);\n currentAttributes.position.values.push(p0.x, p0.y, p0.z);\n currentAttributes.position.values.push(p2.x, p2.y, p2.z);\n currentAttributes.position.values.push(p2.x, p2.y, p2.z);\n\n for (j = i * 3; j < i * 3 + 4 * 3; ++j) {\n currentAttributes.prevPosition.values.push(prevPositions[j]);\n currentAttributes.nextPosition.values.push(nextPositions[j]);\n }\n\n for (j = i * 2; j < i * 2 + 4 * 2; ++j) {\n currentAttributes.expandAndWidth.values.push(expandAndWidths[j]);\n if (defined(texCoords)) {\n currentAttributes.st.values.push(texCoords[j]);\n }\n }\n\n if (defined(colors)) {\n for (j = i * 4; j < i * 4 + 4 * 4; ++j) {\n currentAttributes.color.values.push(colors[j]);\n }\n }\n\n index = currentAttributes.position.values.length / 3 - 4;\n currentIndices.push(index, index + 2, index + 1);\n currentIndices.push(index + 1, index + 2, index + 3);\n }\n }\n\n if (intersectionFound) {\n updateAdjacencyAfterSplit(westGeometry);\n updateAdjacencyAfterSplit(eastGeometry);\n }\n\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\n}\n\n/**\n * Splits the instances's geometry, by introducing new vertices and indices,that\n * intersect the International Date Line and Prime Meridian so that no primitives cross longitude\n * -180/180 degrees. This is not required for 3D drawing, but is required for\n * correcting drawing in 2D and Columbus view.\n *\n * @private\n *\n * @param {GeometryInstance} instance The instance to modify.\n * @returns {GeometryInstance} The modified instance argument, with it's geometry split at the International Date Line.\n *\n * @example\n * instance = Cesium.GeometryPipeline.splitLongitude(instance);\n */\nGeometryPipeline.splitLongitude = function (instance) {\n //>>includeStart('debug', pragmas.debug);\n if (!defined(instance)) {\n throw new DeveloperError(\"instance is required.\");\n }\n //>>includeEnd('debug');\n\n const geometry = instance.geometry;\n const boundingSphere = geometry.boundingSphere;\n if (defined(boundingSphere)) {\n const minX = boundingSphere.center.x - boundingSphere.radius;\n if (\n minX > 0 ||\n BoundingSphere.intersectPlane(boundingSphere, Plane.ORIGIN_ZX_PLANE) !==\n Intersect.INTERSECTING\n ) {\n return instance;\n }\n }\n\n if (geometry.geometryType !== GeometryType.NONE) {\n switch (geometry.geometryType) {\n case GeometryType.POLYLINES:\n splitLongitudePolyline(instance);\n break;\n case GeometryType.TRIANGLES:\n splitLongitudeTriangles(instance);\n break;\n case GeometryType.LINES:\n splitLongitudeLines(instance);\n break;\n }\n } else {\n indexPrimitive(geometry);\n if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\n splitLongitudeTriangles(instance);\n } else if (geometry.primitiveType === PrimitiveType.LINES) {\n splitLongitudeLines(instance);\n }\n }\n\n return instance;\n};\nexport default GeometryPipeline;\n"],"names":["Cartesian3","scratchCartesian2","scratchCartesian3","Check","defined","Cartesian2","CesiumMath","defaultValue","DeveloperError","IndexDatatype","PrimitiveType","BoundingSphere","Geometry","GeometryAttribute","ComponentDatatype","Cartographic","GeographicProjection","EncodedCartesian3","Matrix4","Matrix3","AttributeCompression","Cartesian4","Plane","IntersectionTests","Intersect","GeometryType"],"mappings":"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"}