|
cesium-native 0.52.0
|
RasterOverlayTileProvider::loadTileImage now receives a const RasterOverlayTile.SharedAssetDepot now uses a templatized "context" instead of separate AsyncSystem and IAssetAccessor parameters. It defaults to SharedAssetContext.RasterOverlayTileProvider:isPlaceholdergetTilegetTileDataBytesgetNumberOfTilesLoadingremoveTileloadTileloadTileThrottledRasterMappedTo3DTile::mapOverlayToTile now takes an ActivatedRasterOverlay instead of a RasterOverlayTileProvider.getOverlays, getTileProviders, and getPlaceholderTileProviders from RasterOverlayCollection. Use getActivatedOverlays instead.SharedAssetDepot now uses a templatized "context" instead of separate AsyncSystem and IAssetAccessor parameters. It defaults to SharedAssetContext.RasterOverlay::getCredits, which was not actually used anywhere. Use RasterOverlayTileProvider::addCredits instead.GoogleMapTilesRasterOverlay.invalidate method to SharedAssetDepot.RasterOverlayExternals class. This is similar to TilesetExternals and is a more convenient way to pass around the various external interfaces that raster overlays use.ActivatedRasterOverlay, encapsulating most of the functionality that was previously found on RasterOverlayTileProvider.addTileOverlays and updateTileOverlays to RasterOverlayCollection.RasterOverlayCollection::add and remove now take a pointer to a const RasterOverlay.CesiumUtility::TransformIterator.CesiumUtility::DerivedValue.RasterOverlayTileProvider::getExternals.log and format methods to ErrorList.AsyncSystem::enterMainThread.JsonObjectJsonHandler::ValueType.trimWhitespace and splitOnCharacter to StringHelpers.IonRasterOverlay::setAssetOptions, providing the ability to supply asset-specific options to Cesium ion when requesting an asset endpoint.RasterizedPolygonsOverlay that could produce crashes with certain tilesets.TilesetHeightQuery would always sample the WGS84 ellipsoid, even if a different one was supplied.libblend2d.a from being installed for iOS.TileProviderAndTile. This is important to prevent it from inadvertently incrementing/decrementing non-thread-safe reference counts from the wrong thread while being moved.LoadedTileEnumerator now provides non-const access to enumerated Tile instances, even if the enumerator itself is const.getRootTile, loadedTiles, and forEachLoadedTile methods on Tileset now only provide a const pointer to Tile instances, even when called on a non-const Tileset. Most modifications to tile instances owned by the tileset would be unsafe.ViewUpdateResult now holds pointers to const Tile instances.slowlyGetCurrentStates and slowlyGetPreviousStates methods of TreeTraversalState now return the state map with a raw pointer to a constant node as the key, even if the node pointer type is a smart pointer.DebugTileStateDatabase::recordTileState now expects the states to be provided as std::unordered_map<const Tile*, TileSelectionState> instead of std::unordered_map<IntrusivePointer<Tile>, TileSelectionState>.VectorRasterizer::drawPolyline now takes a std::vector instead of a std::span.element_type to IntrusivePointer, allowing it to be used with std::pointer_types.IntrusivePointer<T> to T*.tileset.json, except "root", are now parsed into TilesetMetadata when a tileset is loaded by Cesium3DTilesSelection::Tileset.accessorView to PropertyAttributePropertyView to retrieve the underlying AccessorView.Tileset::updateViewGroupOffline that would cause it to get stuck in an endless loop when invoked with no frustums.ColorMode::Random in VectorStyle that caused it to produce different results each time a raster overlay tile was rendered.IonRasterOverlay that would cause unnecessary extra use of Bing Maps sessions when manually reloading the raster overlay after an expired token was automatically refreshed.RasterOverlayTileProvider and QuadtreeRasterOverlayTileProvider constructors now require a CreditSystem parameter.GeoJsonDocumentRasterOverlay for displaying GeoJSON documents as a raster overlay.RasterizedPolygonsOverlay, especially when using lots of cartographic polygons at once.ImplicitTilingUtilities::getParentID to derive the ID of the parent for a given tile ID.IonRasterOverlay now automatically handles refreshing the Cesium ion asset token as needed.CesiumIonAssetAccessor, which is useful for implementing token refresh for Cesium ion assets.refreshTileProviderWithNewKey method to BingMapsRasterOverlay.refreshTileProviderWithNewUrlAndHeaders method to TileMapServiceRasterOverlay.getAsyncDestructionCompleteEvent method to RasterOverlayTileProvider.getCreditSystem method to RasterOverlayTileProvider.CesiumITwinClient::Connection::getAccessToken to CesiumITwinClient::Connection::getAuthenticationToken.CesiumITwinClient::Connection::setAccessToken to CesiumITwinClient::Connection::setAuthenticationToken.CesiumVectorData library for loading data from vector formats. Currently only GeoJSON is supported.CesiumCurl library containing CurlAssetAccessor, an implementation of IAssetAccessor based on libcurl.CesiumITwinClient::Connection::geospatialFeatureCollections to query for all feature collections within an iTwin.CesiumITwinClient::Connection::geospatialFeatures to query features within a feature collection.Cesium3DTilesSelection::TileExternalContent now inherits from CesiumUtility::ExtensibleObject to store and manage extensions from its content, such as Extension3dTilesContentVoxels.EllipsoidTilesetLoader was used.TilesetJsonLoader was used.OrientedBoundingBox::computeDistanceSquaredToPosition() calculation when OrientedBoundingBox has degenerate axes.Authorization: Bearer when no access token is provided while using CesiumIonTilesetLoader. Prevents potential future issues with some servers including GP3D Tiles.CachingAssetAccessor would include "revalidation" headers like If-None-Match in the returned IAssetRequest when the remote server returned new content rather than a 304 response. This could cause the header to be incorrectly included in later requests for different content.SubtreeFileReader where it did not include query parameters from the base URL when requesting an external subtree buffer.BATCH_ID semantic.EXT_instance_features feature ids.SubtreeWriter::writeSubtree to SubtreeWriter::writeSubtreeJson.SubtreeAvailability::createEmpty now requires a boolean parameter to set initial tile availability.Cesium3DTilesSelection::Tile constructors that take initially empty or external content now also require a TileID to be supplied.dbe35ceb30c688bf72e952ab23778e009a578f18, from 2024.11.16. We expect to upgrade again to an official tagged version in the next release.SubtreeWriter::writeSubtreeBinary.SubtreeAvailability wasn't updating the constant and bitstream properties of the availability object when converting constant availability to a bitstream.SubtreeAvailability attempted to update buffer data that was no longer valid.TilesetContentLoaderResult would drop its statusCode between std::moves due to its omission in the move constructor.ViewState::create methods. Use a constructor overload instead.addCreditToFrame, startNextFrame, getCreditsToShowThisFrame, and getCreditsToNoLongerShowThisFrame from CreditSystem. CreditSystem no longer has a notion of a "frame". Instead, credits are included and excluded by calling addCreditReference and removeCreditReference. A snaphot of the current state can be obtained by calling getSnapshot, and it includes both the current set of active credits as well as the credits that were removed since the last snapshot.Cesium3DTilesSelection::Tile:getLastSelectionState and setLastSelectionState. Use TilesetViewGroup::getTraversalState instead.Tile::LoadedLinkedList. Use LoadedTileEnumerator instead.getDoNotUnloadSubtreeCount, incrementDoNotUnloadSubtreeCount, decrementDoNotUnloadSubtreeCount, incrementDoNotUnloadSubtreeCountOnParent, and decrementDoNotUnloadSubtreeCountOnParent. Use addReference, releaseReference, and getReferenceCount instead.RasterOverlayCollection constructor now takes a LoadedTileEnumerator instead of a Tile::LoadedLinkedList.TileSelectionState no longer uses or requires a frame number. This parameter has been removed from its various methods.TilesetContentLoader classes that aggregate other loaders must now implement setOwnerOfNestedLoaders to pass the owner through.DebugTileStateDatabase::recordAllTileStates and recordTileState now must be given a TilesetViewGroup indicating which view group to record states for.ViewUpdateResult now holds IntrusivePointers to Tile instances rather than raw pointers.Tileset::updateView and updateViewOffline. Use updateViewGroup and updateViewGroupOffline instead.vcpkg manifest mode.TilesetViewGroup. View groups select tiles independently from other any other view group. This is useful for applications with multiple viewports to allow them to show different levels-of-detail for the same area.CreditReferencer which makes it easy to track credits in a frame-oriented fashion similar to how CreditSystem::addCreditToFrame worked in previous releases.std::hash implementation for IntrusivePointer that simply hashes the underlying pointer.Math::GoldenRatio.TreeTraversalState to CesiumUtility. It can be used to associate arbitrary data with individual nodes during a depth-first tree traversal and access that data in a later traversal.LoadedTileEnumerator to enumerate the loaded tiles in a Tile subtree.RasterOverlayCollection::setLoadedTileEnumerator.TileLoadRequester, which allows influence over which tiles in a Cesium3DTilesSelection::Tileset are loaded. This is the base class for TilesetViewGroup and TilesetHeightRequest.TileLoadTask, TileLoadPriorityGroup, and TilesetFrameState. Previously these types were private.Cesium3DTilesSelection::Tileset:getUserCredit - Reflects the Credit passed as a string into TilesetOptions::credit.loadedTiles- Allows enumeration of the tileset's loaded tiles.getDefaultViewGroup - Gets the default view group that is used when updateView is called.updateViewGroup - Updates the set of tiles to render for a TilesetViewGroup, as well as the set of tiles that the view group would like to load.updateViewGroupOffline - Similar to updateViewGroup, except that it waits until all of the view group's tiles are fully loaded.loadTiles - Loads tiles that have been identified as required across all TilesetViewGroup and TilesetHeightRequest instances, up to limits specified in TilesetOptions.TilesetContentLoader instances now know the TilesetContentManager that owns them. This is managed with new getOwner and setOwner methods.Math::equalsEpsilon for glm matrices.TileLoadResult for use in prepareInLoadThread.convertAccessorTypeToPropertyType and convertPropertyTypeToAccessorType to CesiumGltf::PropertyType.TilesetContentLoaderFactory constructor on Cesium3DTilesSelection::Tileset.ITwinCesiumCuratedContentLoader can load tilesets from the iTwin Cesium Curated Content API.IModelMeshExportContentLoader can load iModels exported to the 3D Tiles format through the Mesh Export API.ITwinRealityDataContentLoader can load 3D Tiles iTwin Reality Data through the Reality Management API.ITwinCesiumCuratedContentRasterOverlay can load imagery from the iTwin Cesium Curated Content API.CesiumITwinClient library for authorizing with and making requests to the iTwin API.CesiumClientCommon to hold shared code between CesiumIonClient and CesiumITwinClient.GltfReader::resolveExternalData now includes query parameters from the parent URL when resolving relative URLs for external buffers and textures.CesiumGltfReader.ImplicitTilingUtilities::computeBoundingVolume that incorrectly subdivided a BoundingCylinderRegion across the discontinuity line.ktx vcpkg portfile that would cause this library to fail to build.TilesetOptions::maximumSimultaneousSubtreeLoads because it was unused.convertPropertyComponentTypeToAccessorComponentType to PropertyType.Cesium3DTiles, Cesium3DTilesReader, and Cesium3DTilesWriter:3DTILES_ellipsoid3DTILES_content_voxels3DTILES_bounding_volume_cylinderBoundingCylinderRegion to represent 3DTILES_bounding_volume_cylinder in the BoundingVolume variant.EXT_primitive_voxels and its dependencies in CesiumGltf, CesiumGltfReader, and CesiumGltfWriter.AxisAlignedBox::fromPositions, which creates an AxisAlignedBox from an input vector of positions.PropertyView, PropertyTableView, PropertyTablePropertyView, PropertyTextureView, and PropertyTexturePropertyView now support the enum metadata type in EXT_structural_metadata.TypeToDimensions class in PropertyTypeTraits to obtain the dimension count of a glm vector or matrix.canRepresentPropertyType<T> to PropertyTypeTraits to check if a C++ type can represent the given PropertyType.getName method to CesiumGltf::Enum, allowing a scalar enum value to be resolved into its corresponding name in the enum.Tile children of external tilesets will now be cleared when the external tileset is unloaded, fixing a memory leak that happened as a result of these Tile skeletons accumulating over time.: instead of ://.KHR_mesh_quantization normalized values.TilesetOptions are now included in tile content requests. Previously they were only included in the root tileset.json / layer.json request.tileset.json without a valid root tile.EXT_structural_metadata to be interpreted incorrectly.GltfUtilities::parseGltfCopyright that could cause it to crash or produce incorrect results.GltfUtilities::parseGltfCopyright that could cause a crash when the copyright ends with a semicolon.CesiumIonClient::Connection that caused the authorize method to use an incorrect URL.Math::rotation. Use glm::rotation from <glm/gtx/quaternion.hpp> instead.Math::perpVector. Use glm::perp from <glm/gtx/perpendicular.hpp> instead.GLM_ENABLE_EXPERIMENTAL.GLM_FORCE_SIZE_T_LENGTH option with the glm libraryCullingVolume has been moved from the Cesium3DTilesSelection namespace to the CesiumGeometry namespace.forEachTile, forEachContent, addExtensionUsed, addExtensionRequired, removeExtensionUsed, removeExtensionRequired, isExtensionUsed, and isExtensionRequired to Cesium3DTiles::Tileset.EXT_structural_metadata and EXT_instance_features extensions.CesiumIonClient::Connection::geocode method for making geocoding queries against the Cesium ion geocoder API.UrlTemplateRasterOverlay for requesting raster tiles from services using a templated URL.upsampleGltfForRasterOverlays is now compatible with meshes using TRIANGLE_STRIP, TRIANGLE_FAN, or non-indexed TRIANGLES primitives.requestHeaders field to TilesetOptions to allow per-tileset request headers to be specified.GltfWriter that would happen when the EXT_structural_metadata schema property was null.SharedAssetDepot that could cause assertion failures in debug builds, and could rarely cause premature deletion of shared assets even in release builds.Tileset::sampleHeightMostDetailed to return a height that is not the highest one when the sampled tileset contained multiple heights at the given location.LayerJsonTerrainLoader will now log errors and warnings when failing to load a .terrain file referenced in the layer.json, instead of silently ignoring them.CullingVolume when the camera was very far away from the globe.culture parameter of the BingMapsRasterOverlay from having an effect.JsonValueMissingKey and JsonValueNotRealValue from CesiumUtility.offset getter to AccessorView.stride, offset, and data getters to AccessorWriter.value_type typedef to AccessorWriter.InstanceAttributeSemantics to CesiumGltf.VertexAttributeSemantics::FEATURE_ID_n.const version of Tileset::forEachLoadedTile.DebugTileStateDatabase, which provides tools for debugging the tile selection algorithm using SQLite.CesiumAsync::SqliteHelper, containing functions for working with SQLite.EXT_structural_metadata. See https://github.com/CesiumGS/glTF/pull/71.thenPassThrough that caused a compiler error when given a value by r-value refrence.SubtreeFileReader::loadBinary that prevented valid subtrees from loading if they did not contain binary data.Tileset selection algorithm that could cause detail to disappear during load in some cases.Tileset, when they do occur, to be filled with loaded tiles more incrementally.SharedAssetDepot that could lead to crashes and other undefined behavior when an asset in the depot outlived the depot itself.2024.11.16.gsl::span to std::span throughout the library and API. The GSL library has been removed.BingMapsRasterOverlay constructor no longer takes an ellipsoid parameter. Instead, it uses the ellipsoid specified in RasterOverlayOptions.ellipsoid field in RasterOverlayOptions is no longer a std::optional. Instead, it defaults to WGS84 directly.ellipsoid field from TileMapServiceRasterOverlayOptions, WebMapServiceRasterOverlayOptions, and WebMapTileServiceRasterOverlayOptions. These overlays now use the ellipsoid in RasterOverlayOptions instead.schema property of ExtensionModelExtStructuralMetadata is now an IntrusivePointer instead of a std::optional.EXT_accessor_additional_types in AccessorView.EllipsoidTilesetLoader that will generate a tileset by tessellating the surface of an ellipsoid, producing a simple globe tileset without any terrain features.schemaUri property in the EXT_structural_metadata glTF extension are now loaded automatically. Two models that reference the same external schema will share a single copy of it.getHeightSampler method to TilesetContentLoader, allowing loaders to optionally provide a custom, more efficient means of querying heights using the ITilesetHeightSampler interface.JsonValue.TileLoadResult now includes a pAssetAccessor that was used to retrieve the tile content and that should be used to retrieve any additional resources associated with the tile, such as external images.CreditSystem.extensions object would get written if an ExtensibleObject only had unregistered extensions.IntersectionTests::rayTriangleParametric, allowing it to find intersections with smaller triangles.GltfUtilities::intersectRayGltfModel to crash when the model contains a primitive whose position accessor does not have min/max values.IonRasterOverlay now passes its RasterOverlayOptions to the BingMapsRasterOverlay or TileMapServiceRasterOverlay that it creates internally.CachingAssetAccessor that caused it to return cached request headers on a cache hit, rather than the headers included in the new request.SharedAssetDepot that could lead to a crash with assets that fail to load.AccessorView that could cause it to report the view as valid even when its BufferView had a negative byteStride.CesiumUtility/Gunzip.h to CesiumUtility/Gzip.h.ImageCesium to ImageAsset.cesium field in CesiumGltf::Image is now named pAsset and is an IntrusivePointer to an ImageAsset.image field in LoadedRasterOverlayImage is now named pImage and is an IntrusivePointer to an ImageAsset.readImage and generateMipMaps methods on GltfReader. These methods are now found on ImageDecoder.CesiumUtility::gzip.CesiumGeometry::Transforms::getUpAxisTransform to get the transform that converts from one up axis to another.TilesetSharedAssetSystem to Cesium3DTilesSelection and GltfSharedAssetSystem to CesiumGltfReader.SharedAsset to CesiumUtility to serve as the base class for assets such as ImageAsset.SharedAssetDepot to CesiumAsync for managing assets, such as images, that can be shared among multiple models or other objects.NetworkAssetDescriptor and NetworkImageAssetDescriptor.ImageAsset (formerly ImageCesium) is now an ExtensibleObject.VertexAttributeSemantics to CesiumGltf.ImageDecoder to CesiumGltfReader.DoublyLinkedListAdvanced to CesiumUtility. It is equivalent to DoublyLinkedList except it allows the next and previous pointers to be in a base class of the node class.contains method to DoublyLinkedList (and DoublyLinkedListAdvanced).error and warning methods to ErrorList, making it easy to create an instance with a single error or warning.ExtensibleObject::addExtension now takes arguments that are passed through to the extension's constructor.Hash to CesiumUtility.emplace and reset methods to IntrusivePointer.Result<T> and ResultPointer<T> classes to represent the result of an operation that might complete with warnings and errors.AsyncSystem::all where the resolved values of individual futures were copied instead of moved into the output array.QuadtreeTileID.shouldContentContinueUpdating to getMightHaveLatentChildren and setContentShouldContinueUpdating to setMightHaveLatentChildren on the Tile class.LoadedRasterOverlayImage now has a single errorList property instead of separate errors and warnings properties.sampleHeightMostDetailed method to Tileset.AxisAlignedBox now has constexpr constructors.Tileset with a nullptr IPrepareRendererResources.IntersectionTests::rayOBBParametric that could cause incorrect results for some oriented bounding boxes.GltfUtilities::intersectRayGltfModel now reports a warning when given a model it can't compute the intersection with because it uses required extensions that are not supported.catchImmediately and catchInMainThread functions in CesiumAsync that prevented use of a mutable lambda.PRIVATE_CESIUM_SQLITE will no longer automatically rename all of the SQLite symbols. It must also be paired with a vcpkg overlay port that renames the symbols in SQLite itself.PropertyArrayView is now exclusively a view, with no ability to own the data it is viewing. The new PropertyArrayCopy can be used when an owning view is required.CesiumGltfWriter::SchemaWriter for serializing schemas in EXT_structural_metadata.resolveExternalImages flag to GltfReaderOptions, which is true by default.removeExtensionUsed and removeExtensionRequired methods to CesiumGltf::Model.getFeatureIdAccessorView overload for retrieving feature IDs from EXT_instance_features.CesiumGeospatial::EarthGravitationalModel1996Grid class to allow transforming heights on a WGS84 ellipsoid into heights above mean sea level using the EGM96 model.WebMapTileServiceRasterOverlay that caused it to compute the TileRow incorrectly when used with a tiling scheme with multiple tiles in the Y direction at the root.KHR_texture_transform is now removed from extensionsUsed and extensionsRequired after it is applied by GltfReader.AccessorWriter constructor now takes std::byte* instead of uint8_t*.rayTriangle intersection function that returns the intersection point between a ray and a triangle.intersectRayGltfModel intersection function that returns the first intersection point between a ray and a glTF model.convertAccessorComponentTypeToPropertyComponentType, which converts integer glTF accessor component types to their best-fitting PropertyComponentType.TilesetOptions::ellipsoid when creating a tileset.CESIUM_DISABLE_DEFAULT_ELLIPSOID can be defined to disable the WGS84 default parameter, exposing through errors the places in your code that are still assuming a WGS84 ellipsoid.removeUnusedMeshes and removeUnusedMaterials to GltfUtilities.rayEllipsoid static method to CesiumGeometry::IntersectionTests.Cartographic.CESIUM_MSVC_STATIC_RUNTIME_ENABLED option to the CMake scripts. It is OFF by default, and when enabled, configures any MS visual studio projects for the "Multi-threaded" (/MT) runtime library rather than "Multi-threaded DLL" (/MD)gltfUpAxis property is now accounted for, if present.IntersectionTests::pointInTriangle that could discard intersections in small - but valid - triangles.FeatureId::propertyTable is now int32_t instead of std::optional<int64_t>ExtensionMeshPrimitiveExtStructuralMetadata::propertyTextures and ExtensionMeshPrimitiveExtStructuralMetadata::propertyAttributes are now vectors of int32_t instead of int64_t.forEachNodeInScene to CesiumGltf::Model.removeUnusedBuffers to GltfUtilities.Uri class: unescape, unixPathToUriPath, windowsPathToUriPath, nativePathToUriPath, uriPathToUnixPath, uriPathToWindowsPath, and uriPathToNativePath.LayerWriter to the CesiumQuantizedMeshTerrain library and namespace.GltfUtilities::collapseToSingleBuffer for glTFs with many buffers and bufferViews.Model::merge. Previously these extensions could end up broken after merging.KHR_texture_basisuEXT_texture_webpEXT_mesh_gpu_instancingEXT_meshopt_compressionCESIUM_primitive_outlineCESIUM_tile_edgesGltfUtilities::compactBuffer where it would not preserve the alignment of the bufferViews.collapseToSingleBuffer and moveBufferContent functions in GltfUtilities now align to an 8-byte boundary rather than a 4-byte boundary, because bufferViews associated with some glTF extensions require this larger alignment.GltfUtilities::collapseToSingleBuffer now works correctly even if some of the buffers in the model have a uri property and the data at that URI has not yet been loaded. Such buffers are left unmodified.GltfUtilities::collapseToSingleBuffer now works correctly with bufferViews that have the EXT_meshopt_compression extension.GltfUtilities::compactBuffer now accounts for bufferViews with the EXT_meshopt_compression when determining unused buffer ranges.GltfReader decodes buffers with data URLs, and the size of the data in the URL does not match the buffer's byteLength, the byteLength is now updated and a warning is raised. Previously, the mismatch was ignored and would cause problems later when trying to use these buffers.EXT_meshopt_compression and KHR_mesh_quantization are now removed from extensionsUsed and extensionsRequired after they are decoded by GltfReader.RasterOverlayUtilities::createRasterOverlayTextureCoordinates now has min/max values that accurately reflect the range of values. Previously, the minimum was always set to 0.0 and the maximum to 1.0.waitInMainThread method on Future and SharedFuture that could cause it to never return if the waited-for future rejected.absl namespace to the cesium_s2geometry_absl namespace, in order to avoid linker errors when linking against both cesium-native and the full Abseil library.ExtensionWriterContext when attempting to write statically-typed extensions that aren't registered. Now a warning is reported.upsampleGltfForRasterOverlays into RasterOverlayUtilities. Previously it was a global function. Also added two new parameters to it, prior to the existing textureCoordinateIndex parameter.QuantizedMeshLoader from Cesium3DTilesContent to CesiumQuantizedMeshTerrain. If experiencing related linker errors, add CesiumQuantizedMeshTerrain to the libraries you link against.Connection::authorize now requires an ApplicationData parameter, which represents the appData retrieved from a Cesium ion server.CesiumQuantizedMeshTerrain library and namespace, containing classes for working with terrain in the quantized-mesh-1.0 format and its layer.json file.getComponentCountFromPropertyType to PropertyType.removeExtension to ExtensibleObject.IndexFromAccessor to retrieve the index supplied by IndexAccessorType.NormalAccessorType, which is a type definition for a normal accessor. It can be constructed using getNormalAccessorView.Uri::getPath and Uri::setPath.TileTransform::setTransform.GlobeRectangle::splitAtAntiMeridian.BoundingRegionBuilder::toGlobeRectangle.GlobeRectangle::equals and GlobeRectangle::equalsEpsilon.upsampleGltfForRasterOverlays now accepts two new parameters, hasInvertedVCoordinate and textureCoordinateAttributeBaseName.upsampleGltfForRasterOverlays now copies images from the parent glTF into the output model.waitInMainThread method to Future and SharedFuture.forEachRootNodeInScene, addExtensionUsed, addExtensionRequired, isExtensionUsed, and isExtensionRequired methods to CesiumGltf::Model.getNodeTransform, setNodeTransform, removeUnusedTextures, removeUnusedSamplers, removeUnusedImages, removeUnusedAccessors, removeUnusedBufferViews, and compactBuffers methods to GltfUtilities.postprocessGltf method to GltfReader.Model::merge now merges the EXT_structural_metadata and EXT_mesh_features extensions. It also now returns an ErrorList, used to report warnings and errors about the merge process.joinToString when given a collection containing empty strings.QuantizedMeshLoader now creates spec-compliant glTFs from a quantized-mesh terrain tile. Previously, the generated glTF had small problems that could confuse some clients.TileMapServiceRasterOverlay that caused it to build URLs incorrectly when given a URL with query parameters.EXT_structural_metadata now:EXT_structural_metadata and EXT_mesh_features extensions to the glTF's extensionsUsed list.values field referring to an invalid bufferView, which is contrary to the extension's specification._BATCHID attribute to _FEATURE_ID_0 inside the KHR_draco_mesh_compression extension (if present), in addition to the primitive's attributes. Previously, meshes still Draco-compressed after the upgrade, by setting options.decodeDraco=false, did not have the proper attribute name.RTC_CENTER property will now have CESIUM_RTC added to their extensionsRequired and extensionsUsed lists.asset.version field correctly set to "2.0". Previously the version was not set, which is invalid.KHR_materials_unlit extension added to the glTF's extensionsUsed list when the point cloud does not have normals.scene.CESIUM_RTC extension added to the glTF's extensionsRequired and extensionsUsed lists when the PNTS uses the RTC_CENTER property.applyTextureTransform set to true, the accessors and bufferViews created for the newly-generated texture coordinates now have their byteOffset set to zero. Previously, they inherited the value from the original KHR_texture_transform-dependent objects, which was incorrect.bufferViews created for indices during Draco decoding no longer have their byteStride property set, as this is unnecessary and disallowed by the specification.bufferViews created for vertex attributes during Draco decoding now have their target property correctly set to BufferView::Target::ARRAY_BUFFER.KHR_draco_mesh_compression extension is now removed from the primitives, as well as from extensionsUsed and extensionsRequired.upsampleGltfForRasterOverlays.RasterOverlayUtilities::createRasterOverlayTextureCoordinates no longer fails when the model spans the anti-meridian. However, only the larger part of the model on one side of the anti-meridian will have useful texture coordinates.GltfWriter to create an invalid GLB if its total size would be greater than or equal to 4 GiB. Because it is not possible to produce a valid GLB of this size, GltfWriter now reports an error instead.CesiumUtility::Uri::resolve can now properly parse protocol-relative URIs (such as //example.com).GltfReader was not able to read a model when the BIN chunk of the GLB data was more than 3 bytes larger than the size of the JSON-defined buffer.IntersectionTests::pointInTriangle2D to IntersectionTests::pointInTriangle.AccessorWriter constructor that takes an AccessorView.PositionAccessorType, which is a type definition for a position accessor. It can be constructed using getPositionAccessorView.IntersectionTests::pointInTriangle that handle 3D points. One overload includes a barycentricCoordinates parameter that outputs the barycentric coordinates at that point.ImplicitTilingUtilities::computeBoundingVolume that take a Cesium3DTiles::BoundingVolume.ImplicitTilingUtilities::computeBoundingVolume that take an S2CellBoundingVolume and an OctreeTileID. Previously only QuadtreeTileID was supported.setOrientedBoundingBox, setBoundingRegion, setBoundingSphere, and setS2CellBoundingVolume functions to TileBoundingVolumes.SimplePlanarEllipsoidCurve were inverted if one of the input points had a negative height.Tileset::ComputeLoadProgress could incorrectly report 100% before all tiles finished their main thread loading.EXT_feature_metadata in CesiumGltf, CesiumGltfReader, and CesiumGltfWriter. This extension was replaced by EXT_mesh_features, EXT_instance_features, and EXT_structural_metadata.ReferenceCountedNonThreadSafe<T> to ReferenceCounted.h. It is also now a type alias for ReferenceCounted<T, false> rather than an actual class.applyKHRTextureTransform to applyKhrTextureTransform. The corresponding header file was similarly renamed to CesiumGltf/applyKhrTextureTransform.h.TextureViewOptions, which includes the following flags:applyKhrTextureTransformExtension: When true, the view will automatically transform texture coordinates before sampling the texture.makeImageCopy: When true, the view will make its own CPU copy of the image data.TextureView. It views an arbitrary glTF texture and can be affected by TextureViewOptions. FeatureIdTextureView and PropertyTexturePropertyView now inherit from this class.options parameter to PropertyTextureView::getPropertyView and PropertyTextureView::forEachProperty, allowing views to be constructed with property-specific options.KhrTextureTransform, a utility class that parses the KHR_texture_transform glTF extension and reports whether it is valid. UVs may be transformed on the CPU using applyTransform.contains method to BoundingSphere.GlobeRectangle::MAXIMUM static field.ReferenceCountedThreadSafe type alias.SimplePlanarEllipsoidCurve class to help with calculating fly-to paths.sizeBytes field to ImageCesium, allowing its size to be tracked for caching purposes even after its pixelData has been cleared.scaleToGeocentricSurface method to Ellipsoid.BoundingVolume::estimateGlobeRectangle where it returned an incorrect rectangle for boxes and spheres that encompass the entire globe.applySamplerWrapS and applySamplerWrapT.IndicesForFaceFromAccessor now properly supports TRIANGLE_STRIP and TRIANGLE_FAN modes. This requires the struct to be initialized with the correct primitive mode.WebMapTileServiceRasterOverlay.std::string to other metadata types in MetadataConversions. This enables the same conversions as std::string_view, while allowing runtime engines to use std::string for convenience.applyTextureTransform property to TilesetOptions, which indicates whether to preemptively apply transforms to texture coordinates for textures with the KHR_texture_transform extension.loadGltf method to GltfReader, making it easier to do a full, asynchronous load of a glTF.FeatureIdTextureView where it ignored the wrap values specified on the texture's sampler.PropertyTablePropertyView where arrayOffsets were treated as byte offsets, instead of as array indices.defaults method to CesiumIonClient::Connection.SubtreeAvailability::loadSubtree.getApiUrl method of CesiumIonClient::Connection would not return the default API URL if the attempt to access config.json failed in a more serious way, such as because of an invalid hostname.ErrorList, CreditSystem, and Credit from Cesium3DTilesSelection to CesiumUtility.GltfUtilities from Cesium3DTilesSelection to Cesium3DTilesContent.RasterOverlay, RasterOverlayTileProvider, RasterOverlayTile, QuadtreeRasterOverlayTileProvider, RasterOverlayLoadFailure, RasterOverlayDetails, and all of the RasterOverlay-derived types to a new CesiumRasterOverlays library and namespace.createRasterOverlayTextureCoordinates method from GltfUtilities to a new RasterOverlayUtilities class in the CesiumRasterOverlays library.GltfUtilities::parseGltfCopyright now returns the credits as a vector of std::string_view instances. Previously it took a CreditSystem and created credits directly.SubtreeAvailability constructor and loadSubtree static method now take an ImplicitTileSubdivisionScheme enumeration parameter instead of a powerOf2 parameter. They also now require a levelsInSubtree parameter, which is needed when switching from constant to bitstream availability. Lastly, the constructor now takes a Subtree parameter instead of a std::vector<std::vector<std::byte>> representing the buffers.SubtreeConstantAvailability, SubtreeBufferViewAvailability, and AvailabilityView are now members of SubtreeAvailability.ImageManipulation from CesiumGltfReader to CesiumGltfContent.RasterOverlayUtilities::createRasterOverlayTextureCoordinates and changed the order of some existing parameters.Cesium3DTilesContent library and namespace. It has classes for loading, converting, and manipulating 3D Tiles tile content.CesiumGltfContent library and namespace. It has classes for manipulating in-memory glTF files.CesiumRasterOverlays library and namespace. It has classes for working with massive textures draped over glTFs and 3D Tiles.MetadataConversions, which enables metadata values to be converted to different types for better usability in runtime engines.typedefs to catch all possible types of AccessorViews for an attribute, including FeatureIdAccessorType for feature ID attribute accessors, IndexAccessorType for index accessors, and TexCoordAccessorType for texture coordinate attribute accessors.getFeatureIdAccessorView, getIndexAccessorView, and getTexCoordAccessorView to retrieve the AccessorView as a FeatureIdAccessorType, IndexAccessorType, or TexCoordAccessorType respectively.StatusFromAccessor and CountFromAccessor visitors to retrieve the accessor status and size respectively. This can be used with FeatureIdAccessorType, IndexAccessorType, or TexCoordAccessorType.FeatureIdFromAccessor to retrieve feature IDs from a FeatureIdAccessorType.IndicesForFaceFromAccessor to retrieve the indices of the vertices that make up a face, as supplied by IndexAccessorType.TexCoordFromAccessor to retrieve the texture coordinates from a TexCoordAccessorType.TileBoundingVolumes class to Cesium3DTilesContent, making it easier to create the rich bounding volume types in CesiumGeometry and CesiumGeospatial from the simple vector representations in Cesium3DTiles.transform method to CesiumGeometry::BoundingSphere.toSphere, fromSphere, and fromAxisAligned methods to CesiumGeometry::OrientedBoundingBox.TileTransform class to Cesium3DTilesContent, making it easier to create a glm::dmat4 from the transform property of a Cesium3DTiles::Tile.ImplicitTilingUtilities class to Cesium3DTilesContent.isTileAvailable, isContentAvailable, and isSubtreeAvailable on the SubtreeAvailability class that take the subtree root tile ID and the tile ID of interest, instead of a relative level and Morton index.fromSubtree and createEmpty static methods to SubtreeAvailability.set methods to SubtreeAvailability, allowing the availability information to be modified.SubtreeFileReader class, used to read Cesium3DTiles::Subtree from a binary or JSON subtree file.pointInTriangle2D static method to CesiumGeometry::IntersectionTests.rectangleIsWithinPolygons and rectangleIsOutsidePolygons static methods to CartographicPolygon.IPrepareRasterOverlayRendererResources, which contains only overlay-related methods, instead of IPrepareRendererResources, which contains tileset-related methods as well. IPrepareRendererResources derives from IPrepareRasterOverlayRendererResources so existing code should continue to work without modification.collapseToSingleBuffer and moveBufferContent methods to GltfUtilities.savePng method to ImageManipulation.RasterOverlayTileProvider::loadTile now returns a future that resolves when the tile is done loading.computeDesiredScreenPixels and computeTranslationAndScale methods to RasterOverlayUtilities.Future<T>::thenPassThrough, used to easily pass additional values through to the next continuation.OrientedBoundingBox::contains where it didn't account for the bounding box's center.PropertyAttributeView::forEachProperty.PropertyTablePropertyViewType and NormalizedPropertyTablePropertyViewType, as well as their counterparts for property textures and property attributes. When compiled with Clang, the large std::variant definitions would significantly stall compilation.https://cesium.com/ion/oauth to https://ion.cesium.com/oauth, avoiding a redirect.getClass to PropertyTableView, PropertyTextureView, and PropertyAttributeView. This can be used to retrieve the metadata Class associated with the view.PropertyViewStatus::EmptyPropertyWithDefault to indicate when a property contains no data, but has a valid default value.bufferView with a byteStride of zero is now treated as if the byteStride is not defined at all. Such a glTF technically violates the spec (the minimum value is 4), but the new behavior is sensible enough and consistent with CesiumJS.PropertyTableView, PropertyTextureView, and PropertyAttributeView instances. Previously, if a property was not required and omitted, it would be initialized as invalid with the ErrorNonexistentProperty status. Now, it will be treated as valid as long as the property defines a valid defaultProperty. A special instance of PropertyTablePropertyView, PropertyTexturePropertyView, or PropertyAttributePropertyView will be constructed to allow the property's default value to be retrieved, either via defaultValue or get. getRaw may not be called on this special instance.EXT_feature_metadata will no longer supported by Cesium Native. The extension will still be parsed, but it will log a warning.EXT_structural_metadata instead of EXT_feature_metadata.CesiumGltf, all generated classes related to EXT_feature_metadata are now prefixed with ExtensionExtFeatureMetadata. For example, ClassProperty has become ExtensionExtFeatureMetadataClassProperty. This also extends to the glTF reader and writer.CesiumGltf, all generated classes related to EXT_structural_metadata have had their ExtensionExtStructuralMetadata prefix removed. For example, ExtensionExtStructuralMetadataClassProperty has become ClassProperty. This also extends to the glTF reader and writer.CesiumGltf, ExtensionExtMeshFeaturesFeatureId and ExtensionExtMeshFeaturesFeatureIdTexture have been renamed to FeatureId and FeatureIdTexture respectively.FeatureIDTextureView with FeatureIdTextureView, which views a FeatureIdTexture in EXT_mesh_features. Feature ID textures from EXT_feature_metadata are no longer supported.MetadataFeatureTableView with PropertyTableView, which views a PropertyTable in EXT_structural_metadata.MetadataPropertyView with PropertyTablePropertyView, which is a view of a PropertyTableProperty in EXT_structural_metadata. This takes two template parameters: a typename T , and a bool indicating whether or not the values are normalized.MetadataPropertyViewStatus with PropertyTablePropertyViewStatus. PropertyTablePropertyViewStatus is a class that inherits from PropertyViewStatus, defining additional error codes in the form of static const values.FeatureTextureView with PropertyTextureView, which views a PropertyTexture in EXT_structural_metadata.FeatureTexturePropertyView with PropertyTexturePropertyView, which is a view of a PropertyTextureProperty in EXT_structural_metadata. This takes two template parameters: a typename T , and a bool indicating whether or not the values are normalized.FeatureTexturePropertyComponentType, FeatureTexturePropertyChannelOffsets, and FeatureTexturePropertyValue. PropertyTextureProperty retrieves the values with the type indicated by its class property.FeatureTexturePropertyViewStatus with PropertyTexturePropertyViewStatus. PropertyTexturePropertyViewStatus is a class that inherits from PropertyViewStatus, defining additional error codes in the form of static const values.FeatureIDTextureViewStatus to FeatureIdTextureViewStatus for consistency.MetadataArrayView to PropertyArrayView.FeatureTextureViewStatus to PropertyTextureViewStatus.PropertyType to reflect the values of type in a ClassProperty from EXT_structural_metadata.PropertyView, which acts as a base class for all metadata property views. This takes two template parameters: a type T , and a bool indicating whether or not the values are normalized.PropertyViewStatus, which defines public static const values for various property errors.PropertyTableViewStatus to indicate whether a PropertyTableView is valid.PropertyComponentType to reflect the values of componentType in a ClassProperty from EXT_structural_metadata.PropertyAttributeView, which views a PropertyAttribute in EXT_structural_metadata.PropertyAttributePropertyView, which views a PropertyAttributeProperty in EXT_structural_metadata.PropertyAttributePropertyViewStatus, which reflects the status of a PropertyAttributePropertyView."externalType" assets.Tileset::ComputeLoadProgress can incorrectly report done (100%) before all tiles are actually loaded for the current view.CESIUM_GLM_STRICT_ENABLED option to the CMake scripts. It is ON by default, but when set to OFF it disables the GLM_FORCE_XYZW_ONLY, GLM_FORCE_EXPLICIT_CTOR, and GLM_FORCE_SIZE_T_LENGTH options in the GLM library.FeatureTexturePropertyView.h.Catch2 subdirectory when the tests are disabled.ExtensionReaderContext to JsonReaderOptions, and the getExtensions method on various JSON reader classes to getOptions.IExtensionJsonHandler no longer derives from IJsonHandler. Instead, it has a new pure virtual method, getHandler, that must be implemented to allow clients to obtain the IJsonHandler. In almost all implementations, this should simply return *this.SubtreeReader, SchemaReader, and TilesetReader, the readSubtree, readSchema, and readTileset methods (respectively) have been renamed to readFromJson and return a templated ReadJsonResult instead of a bespoke result class.TileExternalContent is now heap allocated and stored in TileContent with a std::unique_ptr.Tile of a Cesium3DTilesSelection::Tileset now represents the tileset.json itself, and the root tile specified in the tileset.json is its only child. This makes the shape of the tile tree consistent between a standard top-level tileset and an external tileset embedded elsewhere in the tree. In both cases, the "tile" that represents the tileset.json itself has content of type TileExternalContent.LocalHorizontalCoordinateSystem taking ECEF<->Local transformation matrices directly.JsonReader are now stored in the unknownProperties property on ExtensibleObject by default. To ignore them, as was done in previous versions, call setCaptureUnknownProperties on JsonReaderOptions.ValueType type alias to ArrayJsonHandler, for consistency with other JSON handlers.JsonReader::readJson that takes a rapidjson::Value instead of a byte buffer. This allows a subtree of a rapidjson::Document to be easily and efficiently converted into statically-typed classes via IJsonHandler.*Reader classes to CesiumGltfReader and Cesium3DTilesReader to allow each of the classes to be individually read from JSON.getExternalContent method to the TileContent class.TileExternalContent now holds the metadata (schema, schemaUri, metadata, and groups) stored in the tileset.json.loadMetadata and getMetadata methods to Cesium3DTilesSelection::Tileset. They provide access to TilesetMetadata instance representing the metadata associated with a tileset.json.MetadataQuery class to make it easier to find properties with specific semantics in TilesetMetadata.loadErrorCallback.max-age-0, stale-while-revalidate, and Expires).EXT_meshopt_compression extension, which allows decompressing mesh data using the meshoptimizer library. Also added support for the KHR_mesh_quantization and KHR_texture_transform extensions, which are often used together with the EXT_meshopt_compression extension to optimize the size and performance of glTF files.GltfReader::readImage would always populate mipPositions when reading KTX2 images, even when the KTX2 file indicated that it had no mip levels and that they should be created, if necessary, from the base image. As a result, generateMipMaps wouldn't generate any mipmaps for the image.main branch instead of the draft-1.1 branch.computeTransformationToAnotherLocal method to LocalHorizontalCoordinateSystem.KHR_materials_variants extension to the glTF reader and writer.GunzipAssetAccessor. It can decorate another asset accessor in order to automatically gunzip responses (if they're gzipped) even if they're missing the proper Content-Encoding header.UNSIGNED_BYTE indices.WebMapServiceRasterOverlay now allows query parameters in the base URL when building GetCapabilities and GetMap requests.libjpeg-turbo build errors, including ones that occurred when building for iOS.tilesLoadingLowPriority, tilesLoadingMediumPriority, and tilesLoadingHighPriority from ViewUpdateResult. Use workerThreadTileLoadQueueLength and mainThreadTileLoadQueueLength instead.getOrientedBoundingBoxFromBoundingVolume to the Cesium3DTilesSelection namespace.transform and toAxisAligned methods to OrientedBoundingBox.libjpeg-turbo instead of stb for faster jpeg decoding.getNumberOfTilesLoaded method to Tileset.TilesetOptions::forbidHoles works so that it loads much more quickly, while still guaranteeing there are no holes in the tileset.frameNumber property to ViewUpdateResult.stride and data fields of AccessorView.startNewFrame method to ITileExcluder.CreditSystem.setShowOnScreen and Tileset.setShowCreditsOnScreen to allow on-screen credit rendering to be toggled at runtime.center field of AxisAlignedBox to be incorrect.source property, not the glTF's main Texture definition.CesiumGeometry::AxisTransforms to simply Transforms.CesiumGeospatial::Transforms to GlobeTransforms.GlobeAnchor, making it easy to define a coordinate system that anchors an object to the globe and maintains it as the object moves or as the local coordinate system it is defined in changes.pnts content. Point clouds are converted to glTFs with a single POINTS primitive, while batch tables are converted to EXT_feature_metadata.createTranslationRotationScaleMatrix and computeTranslationRotationScaleFromMatrix methods to CesiumGeometry::Transforms.CesiumUtility::AttributeCompression for encoding and decoding vertex attributes in different formats.#include <string> in generated glTF and 3D Tiles header files.std::sprintf with std::snprintf, fixing a warning-as-error in newer versions of Xcode.IonRasterOverlay.gltfUpAxis property in a 3D Tiles tileset.json. While not technically spec-compliant, this property is quite common and we are not going to remove support for it anytime soon.TileMapServiceRasterOverlay or a WebMapServiceRasterOverlay.IPrepareRendererResources, the image parameter passed to prepareRasterInLoadThread and the rasterTile parameter passed to prepareRasterInMainThread are no longer const. These methods are now allowed to modify the parameters during load.IPrepareRendererResources::prepareInLoadThread now takes a TileLoadResult and returns a Future<TileLoadResultAndRenderResources>, allowing it to work asynchronously rather than just blocking a worker thread until it is finished.RasterOverlay::createTileProvider now takes the owner pointer as an IntrusivePointer instead of a raw pointer, and returns a future that resolves to a RasterOverlay::CreateTileProviderResult.mainThreadLoadingTimeLimit and tileCacheUnloadTimeLimit properties to TilesetOptions, allowing a limit to be placed on how much time is spent loading and unloading tiles per frame.GltfReader::generateMipMaps method.getImage method to RasterOverlayTile.LocalHorizontalCoordinateSystem, which is used to create convenient right- or left-handeded coordinate systems with an origin at a point on the globe.TileRenderContent::lodTransitionPercentage now always goes from 0.0 --> 1.0 regardless of if the tile is fading in or out.IPrepareRendererResources::prepareInLoadThread, rendererOptions, to allow passing arbitrary data from the renderer.CesiumGltfWriter, accessor.byteOffset and bufferView.byteOffset are no longer written if the value is 0. This fixes validation errors for accessors that don't have buffer views, e.g. attributes that are Draco compressed.RasterOverlayCollection no longer accepts a Tileset in its constructor. Instead, it now accepts a Tile::LoadedLinkList and a TilesetExternals.TileContext. It has been replaced by the TilesetContentLoader interface.TileContentFactory. Instead, conversions of various types to glTF can be registered with GltfConverters.TileContentLoadInput. It has been replaced by TileLoadInput and TilesetContentLoader.TileContentLoadResult. It has been replaced by TileContent.TileContentLoader. It has been replaced by TilesetContentLoader and GltfConverters.ImplicitTraversal. It has been replaced by TilesetContentLoader and GltfConverters.Cesium3DTilesSelection::Tileset class: getUrl(), getIonAssetID(), getIonAssetToken(), notifyTileStartLoading, notifyTileDoneLoading(), notifyTileUnloading(), loadTilesFromJson(), requestTileContent(), requestAvailabilitySubtree(), addContext(), and getGltfUpAxis(). Most of these were already not recommended for use outside of cesium-native.Cesium3DTilesSelection::Tile class: getTileset(), getContext(), setContext(), getContent(), setEmptyContent(), getRendererResources(), setState(), loadContent(), processLoadedContent(), unloadContent(), update(), and markPermanentlyFailed(). Most of these were already not recommended for use outside of cesium-native.TilesetOptions supporting smooth transitions between tiles at different levels-of-detail. A tile's transition percentage can be retrieved from TileRenderContent::lodTransitionPercentage.EXT_texture_webp extension.KHR_texture_transform to CesiumGltf, CesiumGltfReader, and CesiumGltfWriterTileset can be constructed with a TilesetContentLoader and a root Tile for loading and rendering different 3D Tile-like formats or creating a procedural tileset.loadErrorCallback would not be the one that the user created, but instead an aggregated overlay that was created internally.SqliteCache where the last access time of resources was not updated correctly, sometimes causing more recently used resources to be evicted from the cache before less recently used ones.TilesetWriter and TilesetReader that have been promoted to core in 3D Tiles 1.1
getSupportsRasterOverlays from Tileset because the property is no longer relevant now that all tilesets support raster overlays.TilesetWriter and TilesetReader.TileOcclusionRendererProxyPool to TilesetExternals. If a renderer implements and provides this interface, the tile occlusion information is used to avoid refining parent tiles that are completely occluded, reducing the number of tiles loaded.Tileset can now estimate the percentage of the tiles for the current view that have been loaded by calling the computeLoadProgress method.RasterizedPolygonsOverlay to invert the selection, so everything outside the polygons gets rasterized instead of inside.RasterizedPolygonsTileExcluder excludes tiles outside the selection instead of inside when given an inverted RasterizedPolygonsOverlay.bounds property of the layer.json file of a quantized-mesh terrain tileset is now ignored, and the terrain is assumed to cover the entire globe.In addition to the above, this release updates the following third-party libraries used by cesium-native:
cpp-httplib to v0.10.3 (changes)draco to v1.5.2 (changes)earcut to v2.2.3 (changes)PicoSHA2 to commit 1677374f23352716fc52183255a40c1b8e1d53eb (changes)rapidjson to commit fcb23c2dbf561ec0798529be4f66394d3e4996d8 (changes)spdlog to v1.10.0 (changes)stb to commit af1a5bc352164740c1cc1354942b1c6b72eacb8a (changes)uriparser to v0.9.6 (changes)TilesetOptions::forbidHoles is enabled by only loading child tiles when their parent does not meet the necessary screen-space error requirement.3DTILES_batch_table_hierarchy extension.TilesetOptions::forbidHoles was enabled.TilesetOptions::forbidHoles enabled, particularly when using external tilesets.IPrepareRendererResources::prepareInMainThread was called on a Tile before that Tile was updated with loaded content.IonRasterOverlay after it is freed.rendererOptions, to IPrepareRendererResources::prepareRasterInLoadThread.uint32_t to int64_t.Cesium3DTiles, Cesium3DTilesReader, and Cesium3DTilesWriter namespaces to match the evolving 3D Tiles Next specifications.getTextureCoordinateIndex from FeatureIDTextureView and FeatureTexturePropertyView. Use getTextureCoordinateAttributeId instead.WebMapServiceRasterOverlay to pull raster overlays from a WMS server.CesiumGltf, CesiumGltfReader, and CesiumGltfWriter:EXT_instance_featuresEXT_structural_metadataMAXAR_mesh_variantsScopeGuard class to automatically a execute function when exiting a scope.copyright property, if present, is now included in the credits that Tileset adds to the CreditSystem. If the copyright has multiple parts separate by semicolons, these are treated as separate credits.CreditSystem::getCreditsToShowThisFrame are now sorted based on the number of occurrences, with the most common credits first.Tileset and RasterOverlay credits can now be shown on the screen, rather than in a separate credit popup.FeatureTexturePropertyView::getSwizzle method.IsMetadataArray template to check if a type is a MetadataArrayView.rendererOptions property to RasterOverlayOptions to pass arbitrary data to prepareRasterInLoadThread.Uri::escape.Promise::resolve().EXT_feature_metadata feature tables.CesiumUtility::Math to use PascalCase instead of SCREAMING_SNAKE_CASE.CESIUM_RTC and KHR_texture_basisu glTF extensions.TilesetOptions and RasterOverlayOptions each have a new option to report which compressed textured formats are supported on the client platform. Ideal formats amongst the available ones are picked for each KTX2 texture that is later encountered.ImageCesium class nows convey which GPU pixel compression format (if any) is used. This informs what to expect in the image's pixel buffer.ImageCesium class can now contain pre-computed mipmaps, if they exist. In that case, all the mips will be in the pixel buffer and the delineation between each mip will be described in ImageCesium::mipPositions.file: URLs.IAssetAccessor::requestAsset to get.IAssetAccessor::post to request and added a new parameter in the second position to specify the HTTP verb to use.Token in CesiumIonClient has been updated to match Cesium ion's v2 REST API endpoint, so several fields have been renamed. The tokens method also now returns future that resolves to a TokenList instead of a plain vector of Token instances.GltfReader::readModel, ModelReaderResult, and ReadModelOptions to GltfReader::readGltf, GltfReaderResult, and GltfReaderOptions respectively.writeModelAsEmbeddedBytes, writeModelAndExternalFiles, WriteModelResult, WriteModelOptions, and WriteGLTFCallback. Use GltfWriter::writeGltf, GltfWriter::writeGlb, GltfWriterResult, and GltfWriterOptions instead.TilesetWriterOptions for serializing tileset JSON.GltfWriter and GltfReader:
TilesetWriter and TilesetReader:
SubtreeWriter and SubtreeReader for serializing and deserializing the subtree format in 3DTILES_implicit_tiling.SchemaWriter and SchemaReader for serializing and deserializing schemas in EXT_mesh_features and 3DTILES_metadata.hasExtension to ExtensibleObject.CESIUM_TESTS_ENABLED option to the build system.Connection in CesiumIonClient:tokens method now uses the v2 service endpoint and allows a number of options to be specified.token method to allow details of a single token to be retrieved.nextPage and previousPage methods to allow paging through tokens.modifyToken method.getIdFromToken method to obtain a token ID from a given token value.loadErrorCallback to TilesetOptions and RasterOverlayOptions. This callback is invoked when the Tileset or RasterOverlay encounter a load error, allowing the error to be handled by application code.IntrusivePointer<T> to be converted to IntrusivePointer<U> if U is a base class of T.notifyTileDoneLoading was not called when encountering Ion responses that can't be parsed.SharedFuture from returning a Future itself.computeDistanceSquaredToPosition in BoundingSphere.CesiumGltfReader project now uses the CesiumGltfReader namespace instead of the CesiumGltf namespace.CesiumGltfWriter project now uses the CesiumGltfWriter namespace instead of the CesiumGltf namespace.Cesium3DTilesReader project now uses the Cesium3DTilesReader namespace instead of the Cesium3DTiles namespace.Cesium3DTilesWriter library.QuadtreeRasterOverlayTileProvider that caused incorrect level-of-detail selection for overlays that use a global (or otherwise large) tiling scheme but have non-global (or otherwise smaller) coverage.QuadtreeRasterOverlayTileProvider::computeLevelFromGeometricError has been removed. computeLevelFromTargetScreenPixels may be useful as a replacement.RasterOverlayTileProvider now requires a coverage rectangle.RasterOverlayTileProvider::getTile now takes a targetScreenPixels instead of a targetGeometricError.RasterMappedTo3DTile now requires a texture coordinate index.RasterOverlayTile now takes a targetScreenPixels instead of a targetGeometricError. And the corresponding getTargetGeometricError has been removed.TileContentLoadResult::rasterOverlayProjections. This field is now found in the overlayDetails.obtainGlobeRectangle from TileUtilities.h. Use estimateGlobeRectangle in BoundingVolume.h instead.glm library:GLM_FORCE_XYZW_ONLYGLM_FORCE_EXPLICIT_CTORGLM_FORCE_SIZE_T_LENGTHRasterOverlay can now be configured with a maximumScreenSpaceError independent of the screen-space error used for the geometry.RasterOverlay::loadTileProvider now returns a SharedFuture, making it easy to attach a continuation to run when the load completes.GltfContent::applyRtcCenter and applyGltfUpAxisTransform.DebugColorizeTilesRasterOverlay.BoundingRegionBuilder to CesiumGeospatial.GlobeRectangle::EMPTY static field and GlobeRectangle::isEmpty method.GlobeRectangle after construction.GlobeRectangle::computeCenter and GlobeRectangle::contains.BufferView::target now defaults to std::nullopt instead of Target::ARRAY_BUFFER.ClassProperty::type now defaults to Type::INT8 instead of empty string.ClassProperty::componentType is now an optional string instead of a JsonValue.FeatureTexture::classProperty is no longer optional, consistent with changes to the extension spec.Image::mimeType now defaults to empty string instead of MimeType::image_jpeg.Sampler::magFilter and Sampler::minFilter now default to std::nullopt instead of MagFilter::NEAREST.ExtensibleObject in the CesiumGltf library and namespace has been removed. Use the one in the CesiumUtility library and namespace instead.KHR_draco_mesh_compression -> ExtensionKhrDracoMeshCompression.MeshPrimitiveEXT_feature_metadata -> ExtensionMeshPrimitiveExtFeatureMetadataModelEXT_feature_metadata -> ExtensionModelExtFeatureMetadataCesiumGltf::ReaderContext has been removed. It has been replaced with either CesiumJsonReader::ExtensionReaderContext or GltfReader.Cesium3DTiles and Cesium3DTilesReader libraries. They are useful for reading and working with 3D Tiles tilesets.file:// URLs, so the bug prevented loading from such URLs in some environments.generate-classes deals with reserved C++ keywords. Property names that are C++ keywords should be appended with "Property" as was already done, but when parsing JSONs the original property name string should be used.Future, which allows them to be asynchronous and make further network requests.RTC_CENTER semantic in a B3DM feature table to be ignored if any of the values happened to be integers rather than floating-point numbers. This caused these tiles to render in the wrong location.QuadtreeRasterOverlayTileProvider were not collected and reported.Cesium3DTiles namespace and library to Cesium3DTilesSelection.Cesium3DTilesSelection::Gltf and moved functionality into CesiumGltf::Model.Rectangle::intersect and GlobeRectangle::intersect to computeIntersection.RasterOverlay and derived classes now require a name parameter to their constructors.uint32_t to int32_t.RasterOverlayTileProvider is no longer quadtree-oriented. Instead, it requires derived classes to provide an image for a particular requested rectangle and geometric error. Classes that previously derived from RasterOverlayTileProvider should now derive from QuadtreeRasterOverlayTileProvider and implement loadQuadtreeTileImage instead of loadTileImage.TilesetOptions::enableWaterMask, which didn't have any effect anyway. TilesetContentOptions::enableWaterMask still exists and works.Future<T>::isReady.Future<T>::share, which returns a SharedFuture<T> and allows multiple continuations to be attached.TilesetOptions::ContentOptions to generate smooth normals when the original glTFs were missing normals.ImageManipulation class to CesiumGltfReader.Math::roundUp and Math::roundDown.Rectangle::computeUnion.normalTextureInfo rather than normalTexture.TileMapServiceRasterOverlay that caused it to show only the lowest resolution tiles if missing a tilemapresource.xml file.Future<T>::wait now returns the resolved value and throws if the Future rejected, rather than returning a std::variant and slicing the exception to std::exception.Tileset::updateView and Tileset::updateViewOffline now take std::vector<ViewState> instead of a single ViewState.EXT_feature_metadata glTF extension.EXT_feature_metadata extension.CESIUM_COVERAGE_ENABLED option to the build system.AsyncSystem::dispatchOneMainThreadTask to dispatch a single task, rather than all the tasks that are waiting.AsyncSystem::createPromise to create a Promise directly, rather than via a callback as in AsyncSystem::createFuture.AsyncSystem::catchImmediately to catch a Future rejection immediately in any thread.AsyncSystem::all to create a Future that resolves when a list of Futures resolve.Tileset selection algorithm..then functions from being used on a Future<void> when CESIUM_TRACING_ENABLED was ON.TilesetExternals now has an AsyncSystem instead of a shared pointer to an ITaskProcessor.CESIUM_TRACE_* macros.Future<T>::thenImmediately.AsyncSystem::createThreadPool and Future<T>::thenInThreadPool.Future<T>::thenInWorkerThread and Future<T>::thenInMainThread now arrange for their continuations to be executed immediately when the Future is resolved, if the Future is resolved in the correct thread.Cesium3DTiles::TileIdUtilities with a createTileIdString function to create logging/debugging strings for TileID objects.PRIVATE_CESIUM_SQLITE, to rename all sqlite3* symbols to cesium_sqlite3*.createAccessorView now creates an (invalid) AccessorView with a standard numeric type on error, rather than creating AccessorView<nullptr_t>. This makes it easier to use a simple lambda as the callback.HTTPLIB_USE_ZLIB_IF_AVAILABLE and HTTPLIB_USE_OPENSSL_IF_AVAILABLE because these libraries are not required for our use for cpp-httplib and they cause problems on some systems.RasterOverlay.magic_enum / CodeCoverage.cmake dependencies to external submodules.CesiumGltf::WriteFlags bitmask with CesiumGltf::WriteModelOptions struct. CesiumGltf::writeModelAsEmbeddedBytes and CesiumGltf::writeModelAndExternalfiles now use this struct for configuration.WriterException.h, warnings / errors are now reported in WriteModelResult, which is returned from CesiumGltf::writeModelAsEmbeddedBytes and CesiumGltf::writeModelAndExternalFiles instead.JsonValue from the CesiumGltf library to the CesiumUtility library and changes some of its methods.CesiumGltf::Reader to CesiumGltf::GltfReader.readModel and readImage methods on GltfReader instance methods instead of static methods.CesiumGltfWriter library.CesiumJsonReader library.CesiumIonClient::Connection.Axis enum and AxisTransforms class for coordinate system transformsgltfUpVector string property in the asset part of tilesets. The up vector is read and passed as an Axis in the extras["gltfUpVector"] property, so that receivers may rotate the glTF model's up-vector to match the Z-up convention of 3D Tiles.JsonValue. Previously, they were ignored.GltReader::registerExtension.GltfReader::setExtensionState, which can be used to request that an extension not be deserialized or that it be deserialized as a JsonValue even though a statically-typed class is available for the extension.metallicFactor of 0.0 and a roughnessFactor of 1.0. Previously the default glTF material was used, which has a metallicFactor of 1.0, leading to an undesirable appearance.BingMapsRasterOverlay purposely requests that the Bing servers return a zero-length image for non-existent tiles.