103 KiB
103 KiB
Change Log
? - ?
Breaking Changes 📣
- Restored vcpkg commit update to
2025.09.17.
Additions 🎉
- Added support for the
KHR_gaussian_splattingextension.- SPZ payloads for
KHR_guassian_splattingusing theKHR_gaussian_splatting_compression_spz_2extension will now be decoded.
- SPZ payloads for
Fixes 🔧
- Fixed a bug in
GoogleMapTilesRasterOverlaythat tried to parse credits from an erroneous viewport service response.
v0.52.1 - 2025-10-01
Breaking Changes 📣
- Reverted vcpkg update that could interfere with builds on headless MacOS.
v0.52.0 - 2025-10-01
Breaking Changes 📣
RasterOverlayTileProvider::loadTileImagenow receives a constRasterOverlayTile.SharedAssetDepotnow uses a templatized "context" instead of separateAsyncSystemandIAssetAccessorparameters. It defaults toSharedAssetContext.- Removed the following from
RasterOverlayTileProvider:- The constructor overloads that were used to create a placeholder tile provider.
isPlaceholdergetTilegetTileDataBytesgetNumberOfTilesLoadingremoveTileloadTileloadTileThrottled
RasterMappedTo3DTile::mapOverlayToTilenow takes anActivatedRasterOverlayinstead of aRasterOverlayTileProvider.- Removed
getOverlays,getTileProviders, andgetPlaceholderTileProvidersfromRasterOverlayCollection. UsegetActivatedOverlaysinstead. SharedAssetDepotnow uses a templatized "context" instead of separateAsyncSystemandIAssetAccessorparameters. It defaults toSharedAssetContext.- Removed
RasterOverlay::getCredits, which was not actually used anywhere. UseRasterOverlayTileProvider::addCreditsinstead. - Upgraded vcpkg to
2025.09.17.
Additions 🎉
- Added
GoogleMapTilesRasterOverlay. - Added
invalidatemethod toSharedAssetDepot. - Added
RasterOverlayExternalsclass. This is similar toTilesetExternalsand is a more convenient way to pass around the various external interfaces that raster overlays use. - Added
ActivatedRasterOverlay, encapsulating most of the functionality that was previously found onRasterOverlayTileProvider. - Added
addTileOverlaysandupdateTileOverlaystoRasterOverlayCollection. RasterOverlayCollection::addandremovenow take a pointer to a constRasterOverlay.- Added
CesiumUtility::TransformIterator. - Added
CesiumUtility::DerivedValue. - Added
RasterOverlayTileProvider::getExternals. - Added new
logandformatmethods toErrorList. - Added
AsyncSystem::enterMainThread. - Added
JsonObjectJsonHandler::ValueType. - Added
trimWhitespaceandsplitOnCharactertoStringHelpers. - Added
IonRasterOverlay::setAssetOptions, providing the ability to supply asset-specific options to Cesium ion when requesting an asset endpoint.
Fixes 🔧
- The Cesium ion token for raster overlays is now automatically refreshed every 55 minutes. Previously, it would refresh on a 401 HTTP status code, which could cause extraneous session usage if the raster overlay ever returned a 401 error for a non-token-related reason.
- Reverted change to
RasterizedPolygonsOverlaythat could produce crashes with certain tilesets. - Fixed a bug where
TilesetHeightQuerywould always sample the WGS84 ellipsoid, even if a different one was supplied. - Fixed a build system bug that prevented
libblend2d.afrom being installed for iOS. - Fixed a bug when loading terrain where custom HTTP headers were not propagated through all terrain loading requests, preventing authentication tokens and API keys from working correctly with authenticated terrain services.
- Added a move constructor and assignment operator to
TileProviderAndTile. This is important to prevent it from inadvertently incrementing/decrementing non-thread-safe reference counts from the wrong thread while being moved. LoadedTileEnumeratornow provides non-const access to enumeratedTileinstances, even if the enumerator itself is const.
v0.51.0 - 2025-09-02
Breaking Changes 📣
- The
getRootTile,loadedTiles, andforEachLoadedTilemethods onTilesetnow only provide a const pointer toTileinstances, even when called on a non-constTileset. Most modifications to tile instances owned by the tileset would be unsafe. ViewUpdateResultnow holds pointers to constTileinstances.- The
slowlyGetCurrentStatesandslowlyGetPreviousStatesmethods ofTreeTraversalStatenow 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::recordTileStatenow expects the states to be provided asstd::unordered_map<const Tile*, TileSelectionState>instead ofstd::unordered_map<IntrusivePointer<Tile>, TileSelectionState>.VectorRasterizer::drawPolylinenow takes astd::vectorinstead of astd::span.
Additions 🎉
- Added
element_typetoIntrusivePointer, allowing it to be used withstd::pointer_types. - Added implicit conversion of
IntrusivePointer<T>toT*. - All properties and extensions from
tileset.json, except"root", are now parsed intoTilesetMetadatawhen a tileset is loaded byCesium3DTilesSelection::Tileset. - Added
accessorViewtoPropertyAttributePropertyViewto retrieve the underlyingAccessorView.
Fixes 🔧
- Fixed a bug in
Tileset::updateViewGroupOfflinethat would cause it to get stuck in an endless loop when invoked with no frustums. - Fixed a bug with
ColorMode::RandominVectorStylethat caused it to produce different results each time a raster overlay tile was rendered. - Fixed a bug in
IonRasterOverlaythat would cause unnecessary extra use of Bing Maps sessions when manually reloading the raster overlay after an expired token was automatically refreshed. - Fixed a bug that could lead to a crash when using raster overlays with tilesets that use "external tilesets", such as Google Photorealistic 3D Tiles.
v0.50.0 - 2025-08-01
Breaking Changes 📣
- The
RasterOverlayTileProviderandQuadtreeRasterOverlayTileProviderconstructors now require aCreditSystemparameter.
Additions 🎉
- Added
GeoJsonDocumentRasterOverlayfor displaying GeoJSON documents as a raster overlay. - Improved performance of
RasterizedPolygonsOverlay, especially when using lots of cartographic polygons at once. - Added
ImplicitTilingUtilities::getParentIDto derive the ID of the parent for a given tile ID. IonRasterOverlaynow automatically handles refreshing the Cesium ion asset token as needed.- Added
CesiumIonAssetAccessor, which is useful for implementing token refresh for Cesium ion assets. - Added
refreshTileProviderWithNewKeymethod toBingMapsRasterOverlay. - Added
refreshTileProviderWithNewUrlAndHeadersmethod toTileMapServiceRasterOverlay. - Added
getAsyncDestructionCompleteEventmethod toRasterOverlayTileProvider. - Added
getCreditSystemmethod toRasterOverlayTileProvider.
v0.49.0 - 2025-07-01
Breaking Changes 📣
- Renamed
CesiumITwinClient::Connection::getAccessTokentoCesiumITwinClient::Connection::getAuthenticationToken. - Renamed
CesiumITwinClient::Connection::setAccessTokentoCesiumITwinClient::Connection::setAuthenticationToken.
Additions 🎉
- Added
CesiumVectorDatalibrary for loading data from vector formats. Currently only GeoJSON is supported. - Added
CesiumCurllibrary containingCurlAssetAccessor, an implementation ofIAssetAccessorbased on libcurl. - Added support for the iTwin Geospatial Features API.
- Added
CesiumITwinClient::Connection::geospatialFeatureCollectionsto query for all feature collections within an iTwin. - Added
CesiumITwinClient::Connection::geospatialFeaturesto query features within a feature collection.
- Added
Cesium3DTilesSelection::TileExternalContentnow inherits fromCesiumUtility::ExtensibleObjectto store and manage extensions from its content, such asExtension3dTilesContentVoxels.
Fixes 🔧
- Fixed crash when unloading tilesets with raster overlays when the
EllipsoidTilesetLoaderwas used. - Fixed incorrect handling of legacy maximumLevel property when the
TilesetJsonLoaderwas used. - Fixed
OrientedBoundingBox::computeDistanceSquaredToPosition()calculation whenOrientedBoundingBoxhas degenerate axes. - Fixed sending empty authorization header
Authorization: Bearerwhen no access token is provided while usingCesiumIonTilesetLoader. Prevents potential future issues with some servers including GP3D Tiles. - Fixed a bug where
CachingAssetAccessorwould include "revalidation" headers likeIf-None-Matchin the returnedIAssetRequestwhen 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. - Fixed a bug in
SubtreeFileReaderwhere it did not include query parameters from the base URL when requesting an external subtree buffer. - Fixed a bug in the parsing of the i3dm
BATCH_IDsemantic. - Fixed a bug in the conversion of i3dm batch ids to
EXT_instance_featuresfeature ids.
v0.48.0 - 2025-06-02
Breaking Changes 📣
- Renamed
SubtreeWriter::writeSubtreetoSubtreeWriter::writeSubtreeJson. SubtreeAvailability::createEmptynow requires a boolean parameter to set initial tile availability.Cesium3DTilesSelection::Tileconstructors that take initially empty or external content now also require aTileIDto be supplied.
Additions 🎉
- Switched to vcpkg registry version
dbe35ceb30c688bf72e952ab23778e009a578f18, from2024.11.16. We expect to upgrade again to an official tagged version in the next release. - Added
SubtreeWriter::writeSubtreeBinary.
Fixes 🔧
- Fixed a bug where
SubtreeAvailabilitywasn't updating theconstantandbitstreamproperties of the availability object when converting constant availability to a bitstream. - Fixed a bug where
SubtreeAvailabilityattempted to update buffer data that was no longer valid. - Fixed a bug where
TilesetContentLoaderResultwould drop itsstatusCodebetweenstd::moves due to its omission in the move constructor. - Fixed a bug introduced in v0.47.0 that caused tiles upsampled for raster overlays to lose their water mask.
v0.47.0 - 2025-05-01
Breaking Changes 📣
- Deprecated the
ViewState::createmethods. Use a constructor overload instead. - Removed
addCreditToFrame,startNextFrame,getCreditsToShowThisFrame, andgetCreditsToNoLongerShowThisFramefromCreditSystem.CreditSystemno longer has a notion of a "frame". Instead, credits are included and excluded by callingaddCreditReferenceandremoveCreditReference. A snaphot of the current state can be obtained by callinggetSnapshot, and it includes both the current set of active credits as well as the credits that were removed since the last snapshot. - Removed the following from
Cesium3DTilesSelection::Tile:getLastSelectionStateandsetLastSelectionState. UseTilesetViewGroup::getTraversalStateinstead.Tile::LoadedLinkedList. UseLoadedTileEnumeratorinstead.getDoNotUnloadSubtreeCount,incrementDoNotUnloadSubtreeCount,decrementDoNotUnloadSubtreeCount,incrementDoNotUnloadSubtreeCountOnParent, anddecrementDoNotUnloadSubtreeCountOnParent. UseaddReference,releaseReference, andgetReferenceCountinstead.
- The
RasterOverlayCollectionconstructor now takes aLoadedTileEnumeratorinstead of aTile::LoadedLinkedList. TileSelectionStateno longer uses or requires a frame number. This parameter has been removed from its various methods.- Derived
TilesetContentLoaderclasses that aggregate other loaders must now implementsetOwnerOfNestedLoadersto pass the owner through. DebugTileStateDatabase::recordAllTileStatesandrecordTileStatenow must be given aTilesetViewGroupindicating which view group to record states for.ViewUpdateResultnow holdsIntrusivePointers toTileinstances rather than raw pointers.- Deprecated
Tileset::updateViewandupdateViewOffline. UseupdateViewGroupandupdateViewGroupOfflineinstead.
Additions 🎉
- Added support for building in
vcpkgmanifest mode. - Added
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. - Added
CreditReferencerwhich makes it easy to track credits in a frame-oriented fashion similar to howCreditSystem::addCreditToFrameworked in previous releases. - Added a
std::hashimplementation forIntrusivePointerthat simply hashes the underlying pointer. - Added
Math::GoldenRatio. - Added
TreeTraversalStatetoCesiumUtility. 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. - Added
LoadedTileEnumeratorto enumerate the loaded tiles in aTilesubtree. - Added
RasterOverlayCollection::setLoadedTileEnumerator. - Added
TileLoadRequester, which allows influence over which tiles in aCesium3DTilesSelection::Tilesetare loaded. This is the base class forTilesetViewGroupandTilesetHeightRequest. - Added
TileLoadTask,TileLoadPriorityGroup, andTilesetFrameState. Previously these types were private. - Added the following to
Cesium3DTilesSelection::Tileset:getUserCredit- Reflects theCreditpassed as a string intoTilesetOptions::credit.loadedTiles- Allows enumeration of the tileset's loaded tiles.getDefaultViewGroup- Gets the default view group that is used whenupdateViewis called.updateViewGroup- Updates the set of tiles to render for aTilesetViewGroup, as well as the set of tiles that the view group would like to load.updateViewGroupOffline- Similar toupdateViewGroup, 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 allTilesetViewGroupandTilesetHeightRequestinstances, up to limits specified inTilesetOptions.
TilesetContentLoaderinstances now know theTilesetContentManagerthat owns them. This is managed with newgetOwnerandsetOwnermethods.- Added support for orthographic and skewed perspective views.
- Added an overload of
Math::equalsEpsilonfor glm matrices. - A tile's bounding volume and content bounding volume are now included in
TileLoadResultfor use inprepareInLoadThread. - Added
convertAccessorTypeToPropertyTypeandconvertPropertyTypeToAccessorTypetoCesiumGltf::PropertyType.
Fixes 🔧
- Point cloud tiles will now be upsampled for raster overlays, fixing an issue where applying a raster overlay to a point cloud tileset would cause holes to appear.
- Fixed a crash caused by invalid I3dm headers.
- Fixed a bug that could cause an assertion failure or crash when unloading a tileset with raster overlays and external tilesets.
v0.46.0 - 2025-04-01
Additions 🎉
- Added new TilesetContentLoaders constructible using the new
TilesetContentLoaderFactoryconstructor onCesium3DTilesSelection::Tileset.ITwinCesiumCuratedContentLoadercan load tilesets from the iTwin Cesium Curated Content API.IModelMeshExportContentLoadercan load iModels exported to the 3D Tiles format through the Mesh Export API.ITwinRealityDataContentLoadercan load 3D Tiles iTwin Reality Data through the Reality Management API.
ITwinCesiumCuratedContentRasterOverlaycan load imagery from the iTwin Cesium Curated Content API.- Added
CesiumITwinClientlibrary for authorizing with and making requests to the iTwin API. - Added
CesiumClientCommonto hold shared code betweenCesiumIonClientandCesiumITwinClient.
Fixes 🔧
GltfReader::resolveExternalDatanow includes query parameters from the parent URL when resolving relative URLs for external buffers and textures.- Fixed bugs that could prevent valid metadata in Instanced 3D Model (i3dm) files from being parsed correctly.
- Fixed a memory leak in
CesiumGltfReader. - Fixed a bug in
ImplicitTilingUtilities::computeBoundingVolumethat incorrectly subdivided aBoundingCylinderRegionacross the discontinuity line. - Fixed a broken link in the
ktxvcpkg portfile that would cause this library to fail to build.
v0.45.0 - 2025-03-03
Breaking Changes 📣
- Removed
TilesetOptions::maximumSimultaneousSubtreeLoadsbecause it was unused.
Additions 🎉
- Added
convertPropertyComponentTypeToAccessorComponentTypetoPropertyType. - Added support for the following 3D Tiles extensions to
Cesium3DTiles,Cesium3DTilesReader, andCesium3DTilesWriter:3DTILES_ellipsoid3DTILES_content_voxels3DTILES_bounding_volume_cylinder
- Added
BoundingCylinderRegionto represent3DTILES_bounding_volume_cylinderin theBoundingVolumevariant. - Added generated classes for
EXT_primitive_voxelsand its dependencies inCesiumGltf,CesiumGltfReader, andCesiumGltfWriter. - Added
AxisAlignedBox::fromPositions, which creates anAxisAlignedBoxfrom an input vector of positions. PropertyView,PropertyTableView,PropertyTablePropertyView,PropertyTextureView, andPropertyTexturePropertyViewnow support the enum metadata type inEXT_structural_metadata.- Added
TypeToDimensionsclass inPropertyTypeTraitsto obtain the dimension count of a glm vector or matrix. - Added
canRepresentPropertyType<T>toPropertyTypeTraitsto check if a C++ type can represent the givenPropertyType. - Added
getNamemethod toCesiumGltf::Enum, allowing a scalar enum value to be resolved into its corresponding name in the enum.
Fixes 🔧
Tilechildren of external tilesets will now be cleared when the external tileset is unloaded, fixing a memory leak that happened as a result of theseTileskeletons accumulating over time.- Fixed parsing URIs that have a scheme followed by
:instead of://. - Fixed decoding of
KHR_mesh_quantizationnormalized values. - Requests headers specified in
TilesetOptionsare now included in tile content requests. Previously they were only included in the root tileset.json / layer.json request. - Fixed a crash when loading a
tileset.jsonwithout a valid root tile. - Fixed a bug that could cause variable length string arrays in
EXT_structural_metadatato be interpreted incorrectly.
v0.44.3 - 2025-02-12
Fixes 🔧
- Fixed another bug in
GltfUtilities::parseGltfCopyrightthat could cause it to crash or produce incorrect results.
v0.44.2 - 2025-02-10
Fixes 🔧
- Fixed a bug in
GltfUtilities::parseGltfCopyrightthat could cause a crash when the copyright ends with a semicolon.
v0.44.1 - 2025-02-03
Fixes 🔧
- Fixed a bug in
CesiumIonClient::Connectionthat caused theauthorizemethod to use an incorrect URL.
v0.44.0 - 2025-02-03
Breaking Changes 📣
- Removed
Math::rotation. Useglm::rotationfrom<glm/gtx/quaternion.hpp>instead. - Removed
Math::perpVector. Useglm::perpfrom<glm/gtx/perpendicular.hpp>instead. - Using Cesium Native in non-cmake projects now requires manually defining
GLM_ENABLE_EXPERIMENTAL. - cesium-native no longer uses the
GLM_FORCE_SIZE_T_LENGTHoption with theglmlibrary CullingVolumehas been moved from theCesium3DTilesSelectionnamespace to theCesiumGeometrynamespace.
Additions 🎉
- Added
forEachTile,forEachContent,addExtensionUsed,addExtensionRequired,removeExtensionUsed,removeExtensionRequired,isExtensionUsed, andisExtensionRequiredtoCesium3DTiles::Tileset. - Added conversion of I3dm batch table metadata to
EXT_structural_metadataandEXT_instance_featuresextensions. - Added
CesiumIonClient::Connection::geocodemethod for making geocoding queries against the Cesium ion geocoder API. - Added
UrlTemplateRasterOverlayfor requesting raster tiles from services using a templated URL. upsampleGltfForRasterOverlaysis now compatible with meshes using TRIANGLE_STRIP, TRIANGLE_FAN, or non-indexed TRIANGLES primitives.- Added
requestHeadersfield toTilesetOptionsto allow per-tileset request headers to be specified.
Fixes 🔧
- Fixed a crash in
GltfWriterthat would happen when theEXT_structural_metadataschemaproperty was null. - Fixed a bug in
SharedAssetDepotthat could cause assertion failures in debug builds, and could rarely cause premature deletion of shared assets even in release builds. - Fixed a bug that could cause
Tileset::sampleHeightMostDetailedto return a height that is not the highest one when the sampled tileset contained multiple heights at the given location. LayerJsonTerrainLoaderwill now log errors and warnings when failing to load a.terrainfile referenced in the layer.json, instead of silently ignoring them.- URIs containing unicode characters are now supported.
- Fixed a crash in
CullingVolumewhen the camera was very far away from the globe. - Fixed a bug that prevented the
cultureparameter of theBingMapsRasterOverlayfrom having an effect.
v0.43.0 - 2025-01-02
Breaking Changes 📣
- Removed unused types
JsonValueMissingKeyandJsonValueNotRealValuefromCesiumUtility.
Additions 🎉
- Added
offsetgetter toAccessorView. - Added
stride,offset, anddatagetters toAccessorWriter. - Added
value_typetypedef toAccessorWriter. - Added
InstanceAttributeSemanticstoCesiumGltf. - Added
VertexAttributeSemantics::FEATURE_ID_n. - Added a
constversion ofTileset::forEachLoadedTile. - Added
DebugTileStateDatabase, which provides tools for debugging the tile selection algorithm using SQLite. - Added
CesiumAsync::SqliteHelper, containing functions for working with SQLite. - Updates generated classes for
EXT_structural_metadata. See https://github.com/CesiumGS/glTF/pull/71.
Fixes 🔧
- Fixed a bug in
thenPassThroughthat caused a compiler error when given a value by r-value refrence. - Fixed a raster overlay bug that could cause unnecessary upsampling with failed or missing overlay tiles.
- Fixed a bug in
SubtreeFileReader::loadBinarythat prevented valid subtrees from loading if they did not contain binary data. - Fixed a bug in the
Tilesetselection algorithm that could cause detail to disappear during load in some cases. - Improved the "kicking" mechanism in the tileset selection algorithm. The new criteria allows holes in a
Tileset, when they do occur, to be filled with loaded tiles more incrementally. - Fixed a bug in
SharedAssetDepotthat could lead to crashes and other undefined behavior when an asset in the depot outlived the depot itself. - Fixed a bug that could cause some rotations in an Instanced 3D Model (.i3dm) to be represented incorrectly.
v0.42.0 - 2024-12-02
Breaking Changes 📣
- Cesium Native now requires C++20 and uses vcpkg
2024.11.16. - Switched from
gsl::spantostd::spanthroughout the library and API. The GSL library has been removed. - The
BingMapsRasterOverlayconstructor no longer takes anellipsoidparameter. Instead, it uses the ellipsoid specified inRasterOverlayOptions. - The
ellipsoidfield inRasterOverlayOptionsis no longer astd::optional. Instead, it defaults to WGS84 directly. - Removed the
ellipsoidfield fromTileMapServiceRasterOverlayOptions,WebMapServiceRasterOverlayOptions, andWebMapTileServiceRasterOverlayOptions. These overlays now use the ellipsoid inRasterOverlayOptionsinstead. - The
schemaproperty ofExtensionModelExtStructuralMetadatais now anIntrusivePointerinstead of astd::optional.
Additions 🎉
- Added support for
EXT_accessor_additional_typesinAccessorView. - Added
EllipsoidTilesetLoaderthat will generate a tileset by tessellating the surface of an ellipsoid, producing a simple globe tileset without any terrain features. - External schemas referenced by the
schemaUriproperty in theEXT_structural_metadataglTF extension are now loaded automatically. Two models that reference the same external schema will share a single copy of it. - Added
getHeightSamplermethod toTilesetContentLoader, allowing loaders to optionally provide a custom, more efficient means of querying heights using theITilesetHeightSamplerinterface. - Added equality operator for
JsonValue. TileLoadResultnow includes apAssetAccessorthat 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.
Fixes 🔧
- Updated the CMake install process to install the vcpkg-built Debug binaries in Debug builds. Previously the Release binaries were installed instead.
- Fixed a crash that would occur for raster overlays attempting to dereference a null
CreditSystem. - Fixed a bug where an empty
extensionsobject would get written if anExtensibleObjectonly had unregistered extensions. - Tightened the tolerance of
IntersectionTests::rayTriangleParametric, allowing it to find intersections with smaller triangles. - Fixed a bug that could cause
GltfUtilities::intersectRayGltfModelto crash when the model contains a primitive whose position accessor does not have min/max values. IonRasterOverlaynow passes itsRasterOverlayOptionsto theBingMapsRasterOverlayorTileMapServiceRasterOverlaythat it creates internally.- Fixed a bug in
CachingAssetAccessorthat caused it to return cached request headers on a cache hit, rather than the headers included in the new request. - External resources (such as images) referenced from 3D Tiles content will no longer fail if a Cesium ion token refresh is necessary.
- The Cesium ion token will now only be refreshed once when it expires. Previously, multiple refresh requests could be initiated at about the same time.
- Fixed a bug in
SharedAssetDepotthat could lead to a crash with assets that fail to load. - Fixed a bug in
AccessorViewthat could cause it to report the view as valid even when itsBufferViewhad a negativebyteStride.
v0.41.0 - 2024-11-01
Breaking Changes 📣
- Renamed
CesiumUtility/Gunzip.htoCesiumUtility/Gzip.h. - Renamed
ImageCesiumtoImageAsset. - The
cesiumfield inCesiumGltf::Imageis now namedpAssetand is anIntrusivePointerto anImageAsset. - The
imagefield inLoadedRasterOverlayImageis now namedpImageand is anIntrusivePointerto anImageAsset. - Deprecated the
readImageandgenerateMipMapsmethods onGltfReader. These methods are now found onImageDecoder.
Additions 🎉
- Added
CesiumUtility::gzip. - Added
CesiumGeometry::Transforms::getUpAxisTransformto get the transform that converts from one up axis to another. - Added
TilesetSharedAssetSystemtoCesium3DTilesSelectionandGltfSharedAssetSystemtoCesiumGltfReader. - Added
SharedAssettoCesiumUtilityto serve as the base class for assets such asImageAsset. - Added
SharedAssetDepottoCesiumAsyncfor managing assets, such as images, that can be shared among multiple models or other objects. - Added
NetworkAssetDescriptorandNetworkImageAssetDescriptor. ImageAsset(formerlyImageCesium) is now anExtensibleObject.- Added
VertexAttributeSemanticstoCesiumGltf. - Added
ImageDecodertoCesiumGltfReader. - Added
DoublyLinkedListAdvancedtoCesiumUtility. It is equivalent toDoublyLinkedListexcept it allows the next and previous pointers to be in a base class of the node class. - Added
containsmethod toDoublyLinkedList(andDoublyLinkedListAdvanced). - Added static
errorandwarningmethods toErrorList, making it easy to create an instance with a single error or warning. ExtensibleObject::addExtensionnow takes arguments that are passed through to the extension's constructor.- Added
HashtoCesiumUtility. - Added
emplaceandresetmethods toIntrusivePointer. - Added
Result<T>andResultPointer<T>classes to represent the result of an operation that might complete with warnings and errors.
Fixes 🔧
- Fixed missing ellipsoid parameters that would lead to incorrect results when using non-WGS84 ellipsoids.
- Fixed a bug in
AsyncSystem::allwhere the resolved values of individual futures were copied instead of moved into the output array. - Improved the hash function for
QuadtreeTileID.
v0.40.1 - 2024-10-01
Fixes 🔧
- Fixed a regression in v0.40.0 that could cause tilesets with raster overlays to fail to load in some cases.
v0.40.0 - 2024-10-01
Breaking Changes 📣
- Renamed
shouldContentContinueUpdatingtogetMightHaveLatentChildrenandsetContentShouldContinueUpdatingtosetMightHaveLatentChildrenon theTileclass. LoadedRasterOverlayImagenow has a singleerrorListproperty instead of separateerrorsandwarningsproperties.
Additions 🎉
- Added
sampleHeightMostDetailedmethod toTileset. AxisAlignedBoxnow hasconstexprconstructors.
Fixes 🔧
- Fixed a bug that prevented use of
Tilesetwith a nullptrIPrepareRendererResources. - Fixed a bug in
IntersectionTests::rayOBBParametricthat could cause incorrect results for some oriented bounding boxes. GltfUtilities::intersectRayGltfModelnow reports a warning when given a model it can't compute the intersection with because it uses required extensions that are not supported.- Errors while loading raster overlays are now logged. Previously, they were silently ignored in many cases.
- A raster overlay image failing to load will no longer completely prevent the geometry tile to which it is attached from rendering. Instead, once the raster overlay fails, the geometry tile will be shown without the raster overlay.
- Fixed a bug in the various
catchImmediatelyandcatchInMainThreadfunctions inCesiumAsyncthat prevented use of a mutable lambda.
v0.39.0 - 2024-09-02
Breaking Changes 📣
- Setting the CMake variable
PRIVATE_CESIUM_SQLITEwill 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. PropertyArrayViewis now exclusively a view, with no ability to own the data it is viewing. The newPropertyArrayCopycan be used when an owning view is required.
Additions 🎉
- Added
CesiumGltfWriter::SchemaWriterfor serializing schemas in EXT_structural_metadata. - Added
resolveExternalImagesflag toGltfReaderOptions, which is true by default. - Added
removeExtensionUsedandremoveExtensionRequiredmethods toCesiumGltf::Model. - Added
getFeatureIdAccessorViewoverload for retrieving feature IDs fromEXT_instance_features. - Added
CesiumGeospatial::EarthGravitationalModel1996Gridclass to allow transforming heights on a WGS84 ellipsoid into heights above mean sea level using the EGM96 model.
Fixes 🔧
- Fixed a bug in
WebMapTileServiceRasterOverlaythat caused it to compute theTileRowincorrectly when used with a tiling scheme with multiple tiles in the Y direction at the root. KHR_texture_transformis now removed fromextensionsUsedandextensionsRequiredafter it is applied byGltfReader.- Fixed a bug in the i3dm loader that caused glTF with multiple nodes to not be instanced correctly.
v0.38.0 - 2024-08-01
Breaking Changes 📣
AccessorWriterconstructor now takesstd::byte*instead ofuint8_t*.
Additions 🎉
- Added
rayTriangleintersection function that returns the intersection point between a ray and a triangle. - Added
intersectRayGltfModelintersection function that returns the first intersection point between a ray and a glTF model. - Added
convertAccessorComponentTypeToPropertyComponentType, which converts integer glTF accessor component types to their best-fittingPropertyComponentType.
Fixes 🔧
- Fixed a bug that prevented raster overlays from being correctly applied when a non-standard "glTF up axis" is in use.
v0.37.0 - 2024-07-01
Additions 🎉
- Added full support for custom ellipsoids by setting
TilesetOptions::ellipsoidwhen creating a tileset.- Many methods have been updated with an additional ellipsoid parameter to support this. The WGS84 ellipsoid is used as a default parameter here to ensure API compatibility.
CESIUM_DISABLE_DEFAULT_ELLIPSOIDcan be defined to disable the WGS84 default parameter, exposing through errors the places in your code that are still assuming a WGS84 ellipsoid.
- Added
removeUnusedMeshesandremoveUnusedMaterialstoGltfUtilities. - Added
rayEllipsoidstatic method toCesiumGeometry::IntersectionTests. - Added equality operator for
Cartographic. - Added
CESIUM_MSVC_STATIC_RUNTIME_ENABLEDoption 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)
Fixes 🔧
- Fixed several problems with the loader for the 3D Tiles Instanced 3D Mesh (i3dm) format:
- When an instance transform cannot be decomposed into position, rotation, and scale, a warning will now be logged and an identity transformation will be used. Previously, an undefined transformation would be used.
- The
gltfUpAxisproperty is now accounted for, if present. - Paths to images in i3dm content are now resolved correctly.
- Extraneous spaces at the end of an external glTF URI are now ignored. These are sometimes added as padding in order to meet alignment requirements.
- Removed an overly-eager degenerate triangle test in the 2D version of
IntersectionTests::pointInTrianglethat could discard intersections in small - but valid - triangles. - Fixed a bug while upsampling tiles for raster overlays that could cause them to have an incorrect bounding box, which in some cases would lead to the raster overlay being missing entirely from the upsampled tile.
v0.36.0 - 2024-06-03
Breaking Changes 📣
FeatureId::propertyTableis nowint32_tinstead ofstd::optional<int64_t>ExtensionMeshPrimitiveExtStructuralMetadata::propertyTexturesandExtensionMeshPrimitiveExtStructuralMetadata::propertyAttributesare now vectors ofint32_tinstead ofint64_t.
Additions 🎉
- Added support for I3DM 3D Tile content files.
- Added
forEachNodeInScenetoCesiumGltf::Model. - Added
removeUnusedBufferstoGltfUtilities. - Added the following new methods to the
Uriclass:unescape,unixPathToUriPath,windowsPathToUriPath,nativePathToUriPath,uriPathToUnixPath,uriPathToWindowsPath, anduriPathToNativePath. - Added
LayerWriterto theCesiumQuantizedMeshTerrainlibrary and namespace. - Drastically improved the performance of
GltfUtilities::collapseToSingleBufferfor glTFs with many buffers and bufferViews.
Fixes 🔧
- Added support for the following glTF extensions to
Model::merge. Previously these extensions could end up broken after merging.KHR_texture_basisuEXT_texture_webpEXT_mesh_gpu_instancingEXT_meshopt_compressionCESIUM_primitive_outlineCESIUM_tile_edges
- Fixed a bug in
GltfUtilities::compactBufferwhere it would not preserve the alignment of the bufferViews. - The
collapseToSingleBufferandmoveBufferContentfunctions inGltfUtilitiesnow align to an 8-byte boundary rather than a 4-byte boundary, because bufferViews associated with some glTF extensions require this larger alignment. GltfUtilities::collapseToSingleBuffernow works correctly even if some of the buffers in the model have auriproperty and the data at that URI has not yet been loaded. Such buffers are left unmodified.GltfUtilities::collapseToSingleBuffernow works correctly with bufferViews that have theEXT_meshopt_compressionextension.GltfUtilities::compactBuffernow accounts for bufferViews with theEXT_meshopt_compressionwhen determining unused buffer ranges.- When
GltfReaderdecodes buffers with data URLs, and the size of the data in the URL does not match the buffer'sbyteLength, thebyteLengthis 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_compressionandKHR_mesh_quantizationare now removed fromextensionsUsedandextensionsRequiredafter they are decoded byGltfReader.- The glTF accessor for the texture coordinates created by
RasterOverlayUtilities::createRasterOverlayTextureCoordinatesnow 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. - Fixed a bug in the
waitInMainThreadmethod onFutureandSharedFuturethat could cause it to never return if the waited-for future rejected. - Moved the small amount of Abseil code embedded into the s2geometry library from the
abslnamespace to thecesium_s2geometry_abslnamespace, in order to avoid linker errors when linking against both cesium-native and the full Abseil library. - Fixed a crash in
ExtensionWriterContextwhen attempting to write statically-typed extensions that aren't registered. Now a warning is reported.
v0.35.0 - 2024-05-01
Breaking Changes 📣
- Moved
upsampleGltfForRasterOverlaysintoRasterOverlayUtilities. Previously it was a global function. Also added two new parameters to it, prior to the existingtextureCoordinateIndexparameter. - Moved
QuantizedMeshLoaderfromCesium3DTilesContenttoCesiumQuantizedMeshTerrain. If experiencing related linker errors, addCesiumQuantizedMeshTerrainto the libraries you link against. Connection::authorizenow requires anApplicationDataparameter, which represents theappDataretrieved from a Cesium ion server.
Additions 🎉
- Added a new
CesiumQuantizedMeshTerrainlibrary and namespace, containing classes for working with terrain in thequantized-mesh-1.0format and itslayer.jsonfile. - Added
getComponentCountFromPropertyTypetoPropertyType. - Added
removeExtensiontoExtensibleObject. - Added
IndexFromAccessorto retrieve the index supplied byIndexAccessorType. - Added
NormalAccessorType, which is a type definition for a normal accessor. It can be constructed usinggetNormalAccessorView. - Added
Uri::getPathandUri::setPath. - Added
TileTransform::setTransform. - Added
GlobeRectangle::splitAtAntiMeridian. - Added
BoundingRegionBuilder::toGlobeRectangle. - Added
GlobeRectangle::equalsandGlobeRectangle::equalsEpsilon. upsampleGltfForRasterOverlaysnow accepts two new parameters,hasInvertedVCoordinateandtextureCoordinateAttributeBaseName.upsampleGltfForRasterOverlaysnow copies images from the parent glTF into the output model.- Added
waitInMainThreadmethod toFutureandSharedFuture. - Added
forEachRootNodeInScene,addExtensionUsed,addExtensionRequired,isExtensionUsed, andisExtensionRequiredmethods toCesiumGltf::Model. - Added
getNodeTransform,setNodeTransform,removeUnusedTextures,removeUnusedSamplers,removeUnusedImages,removeUnusedAccessors,removeUnusedBufferViews, andcompactBuffersmethods toGltfUtilities. - Added
postprocessGltfmethod toGltfReader. Model::mergenow merges theEXT_structural_metadataandEXT_mesh_featuresextensions. It also now returns anErrorList, used to report warnings and errors about the merge process.
Fixes 🔧
- Fixed a bug in
joinToStringwhen given a collection containing empty strings. QuantizedMeshLoadernow creates spec-compliant glTFs from a quantized-mesh terrain tile. Previously, the generated glTF had small problems that could confuse some clients.- Fixed a bug in
TileMapServiceRasterOverlaythat caused it to build URLs incorrectly when given a URL with query parameters. - glTFs converted from a legacy batch table to a
EXT_structural_metadatanow:- Add the
EXT_structural_metadataandEXT_mesh_featuresextensions to the glTF'sextensionsUsedlist. - Omit property table properties without any values at all. Previously, such property table properties would have a
valuesfield referring to an invalid bufferView, which is contrary to the extension's specification. - Rename the
_BATCHIDattribute to_FEATURE_ID_0inside theKHR_draco_mesh_compressionextension (if present), in addition to the primitive'sattributes. Previously, meshes still Draco-compressed after the upgrade, by settingoptions.decodeDraco=false, did not have the proper attribute name.
- Add the
- glTFs converted from 3D Tiles B3DMs with the
RTC_CENTERproperty will now haveCESIUM_RTCadded to theirextensionsRequiredandextensionsUsedlists. - glTFs converted from the 3D Tiles PNTS format now:
- Have their
asset.versionfield correctly set to"2.0". Previously the version was not set, which is invalid. - Have the
KHR_materials_unlitextension added to the glTF'sextensionsUsedlist when the point cloud does not have normals. - Have a default
scene. - Have the
CESIUM_RTCextension added to the glTF'sextensionsRequiredandextensionsUsedlists when the PNTS uses theRTC_CENTERproperty.
- Have their
- When glTFs are loaded with
applyTextureTransformset to true, the accessors and bufferViews created for the newly-generated texture coordinates now have theirbyteOffsetset to zero. Previously, they inherited the value from the originalKHR_texture_transform-dependent objects, which was incorrect. bufferViewscreated for indices during Draco decoding no longer have theirbyteStrideproperty set, as this is unnecessary and disallowed by the specification.bufferViewscreated for vertex attributes during Draco decoding now have theirtargetproperty correctly set toBufferView::Target::ARRAY_BUFFER.- After a glTF has been Draco-decoded, the
KHR_draco_mesh_compressionextension is now removed from the primitives, as well as fromextensionsUsedandextensionsRequired. - For glTFs converted from quantized-mesh tiles, accessors created for the position attribute now have their minimum and maximum values set correctly to include the vertices that form the skirt around the edge of the tile.
- Fixed some glTF validation problems with the mode produced by
upsampleGltfForRasterOverlays. RasterOverlayUtilities::createRasterOverlayTextureCoordinatesno 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.- Fixed a bug that caused
GltfWriterto 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::resolvecan now properly parse protocol-relative URIs (such as//example.com).- Fixed a bug where the
GltfReaderwas 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-definedbuffer.
v0.34.0 - 2024-04-01
Breaking Changes 📣
- Renamed
IntersectionTests::pointInTriangle2DtoIntersectionTests::pointInTriangle.
Additions 🎉
- Added
AccessorWriterconstructor that takes anAccessorView. - Added
PositionAccessorType, which is a type definition for a position accessor. It can be constructed usinggetPositionAccessorView. - Added overloads of
IntersectionTests::pointInTrianglethat handle 3D points. One overload includes abarycentricCoordinatesparameter that outputs the barycentric coordinates at that point. - Added overloads of
ImplicitTilingUtilities::computeBoundingVolumethat take aCesium3DTiles::BoundingVolume. - Added overloads of
ImplicitTilingUtilities::computeBoundingVolumethat take anS2CellBoundingVolumeand anOctreeTileID. Previously onlyQuadtreeTileIDwas supported. - Added
setOrientedBoundingBox,setBoundingRegion,setBoundingSphere, andsetS2CellBoundingVolumefunctions toTileBoundingVolumes.
Fixes 🔧
- Fixed a bug where coordinates returned from
SimplePlanarEllipsoidCurvewere inverted if one of the input points had a negative height. - Fixed a bug where
Tileset::ComputeLoadProgresscould incorrectly report 100% before all tiles finished their main thread loading.
v0.33.0 - 2024-03-01
Breaking Changes 📣
- Removed support for
EXT_feature_metadatainCesiumGltf,CesiumGltfReader, andCesiumGltfWriter. This extension was replaced byEXT_mesh_features,EXT_instance_features, andEXT_structural_metadata. - Moved
ReferenceCountedNonThreadSafe<T>toReferenceCounted.h. It is also now a type alias forReferenceCounted<T, false>rather than an actual class. - Renamed
applyKHRTextureTransformtoapplyKhrTextureTransform. The corresponding header file was similarly renamed toCesiumGltf/applyKhrTextureTransform.h.
Additions 🎉
- Added
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.
- Added
TextureView. It views an arbitrary glTF texture and can be affected byTextureViewOptions.FeatureIdTextureViewandPropertyTexturePropertyViewnow inherit from this class. - Added
optionsparameter toPropertyTextureView::getPropertyViewandPropertyTextureView::forEachProperty, allowing views to be constructed with property-specific options. - Added
KhrTextureTransform, a utility class that parses theKHR_texture_transformglTF extension and reports whether it is valid. UVs may be transformed on the CPU usingapplyTransform. - Added
containsmethod toBoundingSphere. - Added
GlobeRectangle::MAXIMUMstatic field. - Added
ReferenceCountedThreadSafetype alias. - Added
SimplePlanarEllipsoidCurveclass to help with calculating fly-to paths. - Added
sizeBytesfield toImageCesium, allowing its size to be tracked for caching purposes even after itspixelDatahas been cleared. - Added
scaleToGeocentricSurfacemethod toEllipsoid.
Fixes 🔧
- Fixed a bug in
BoundingVolume::estimateGlobeRectanglewhere it returned an incorrect rectangle for boxes and spheres that encompass the entire globe. - Fixed an incorrect computation of wrapped texture coordinates in
applySamplerWrapSandapplySamplerWrapT.
v0.32.0 - 2024-02-01
Breaking Changes 📣
IndicesForFaceFromAccessornow properly supportsTRIANGLE_STRIPandTRIANGLE_FANmodes. This requires the struct to be initialized with the correct primitive mode.
Additions 🎉
- Added support for Web Map Tile Service (WMTS) with
WebMapTileServiceRasterOverlay. - Added conversions from
std::stringto other metadata types inMetadataConversions. This enables the same conversions asstd::string_view, while allowing runtime engines to usestd::stringfor convenience. - Added
applyTextureTransformproperty toTilesetOptions, which indicates whether to preemptively apply transforms to texture coordinates for textures with theKHR_texture_transformextension. - Added
loadGltfmethod toGltfReader, making it easier to do a full, asynchronous load of a glTF.
Fixes 🔧
- Fixed a bug in
FeatureIdTextureViewwhere it ignored the wrap values specified on the texture's sampler. - Fixed a bug that could cause binary implicit tiling subtrees with buffers padded to 8-bytes to fail to load.
- Fixed a bug where upgraded batch table properties were not always assigned sentinel values, even when such values were available and required.
- Fixed incorrect behavior in
PropertyTablePropertyViewwherearrayOffsetswere treated as byte offsets, instead of as array indices.
v0.31.0 - 2023-12-14
Additions 🎉
- Add
defaultsmethod toCesiumIonClient::Connection.
Fixes 🔧
- Fixed a crash in
SubtreeAvailability::loadSubtree. - Fixed a bug where the
getApiUrlmethod ofCesiumIonClient::Connectionwould not return the default API URL if the attempt to accessconfig.jsonfailed in a more serious way, such as because of an invalid hostname.
v0.30.0 - 2023-12-01
Breaking Changes 📣
- Moved
ErrorList,CreditSystem, andCreditfromCesium3DTilesSelectiontoCesiumUtility. - Moved
GltfUtilitiesfromCesium3DTilesSelectiontoCesium3DTilesContent. - Moved
RasterOverlay,RasterOverlayTileProvider,RasterOverlayTile,QuadtreeRasterOverlayTileProvider,RasterOverlayLoadFailure,RasterOverlayDetails, and all of theRasterOverlay-derived types to a newCesiumRasterOverlayslibrary and namespace. - Moved
createRasterOverlayTextureCoordinatesmethod fromGltfUtilitiesto a newRasterOverlayUtilitiesclass in theCesiumRasterOverlayslibrary. GltfUtilities::parseGltfCopyrightnow returns the credits as a vector ofstd::string_viewinstances. Previously it took aCreditSystemand created credits directly.- The
SubtreeAvailabilityconstructor andloadSubtreestatic method now take anImplicitTileSubdivisionSchemeenumeration parameter instead of apowerOf2parameter. They also now require alevelsInSubtreeparameter, which is needed when switching from constant to bitstream availability. Lastly, the constructor now takes aSubtreeparameter instead of astd::vector<std::vector<std::byte>>representing the buffers. SubtreeConstantAvailability,SubtreeBufferViewAvailability, andAvailabilityVieware now members ofSubtreeAvailability.- Moved
ImageManipulationfromCesiumGltfReadertoCesiumGltfContent. - Added some new parameters to
RasterOverlayUtilities::createRasterOverlayTextureCoordinatesand changed the order of some existing parameters.
Additions 🎉
- Added new
Cesium3DTilesContentlibrary and namespace. It has classes for loading, converting, and manipulating 3D Tiles tile content. - Added new
CesiumGltfContentlibrary and namespace. It has classes for manipulating in-memory glTF files. - Added new
CesiumRasterOverlayslibrary and namespace. It has classes for working with massive textures draped over glTFs and 3D Tiles. - Added
MetadataConversions, which enables metadata values to be converted to different types for better usability in runtime engines. - Added various
typedefs to catch all possible types ofAccessorViews for an attribute, includingFeatureIdAccessorTypefor feature ID attribute accessors,IndexAccessorTypefor index accessors, andTexCoordAccessorTypefor texture coordinate attribute accessors. - Added
getFeatureIdAccessorView,getIndexAccessorView, andgetTexCoordAccessorViewto retrieve theAccessorViewas aFeatureIdAccessorType,IndexAccessorType, orTexCoordAccessorTyperespectively. - Added
StatusFromAccessorandCountFromAccessorvisitors to retrieve the accessor status and size respectively. This can be used withFeatureIdAccessorType,IndexAccessorType, orTexCoordAccessorType. - Added
FeatureIdFromAccessorto retrieve feature IDs from aFeatureIdAccessorType. - Added
IndicesForFaceFromAccessorto retrieve the indices of the vertices that make up a face, as supplied byIndexAccessorType. - Added
TexCoordFromAccessorto retrieve the texture coordinates from aTexCoordAccessorType. - Added
TileBoundingVolumesclass toCesium3DTilesContent, making it easier to create the rich bounding volume types inCesiumGeometryandCesiumGeospatialfrom the simple vector representations inCesium3DTiles. - Added
transformmethod toCesiumGeometry::BoundingSphere. - Added
toSphere,fromSphere, andfromAxisAlignedmethods toCesiumGeometry::OrientedBoundingBox. - Added
TileTransformclass toCesium3DTilesContent, making it easier to create aglm::dmat4from thetransformproperty of aCesium3DTiles::Tile. - Added
ImplicitTilingUtilitiesclass toCesium3DTilesContent. - Added overloads of
isTileAvailable,isContentAvailable, andisSubtreeAvailableon theSubtreeAvailabilityclass that take the subtree root tile ID and the tile ID of interest, instead of a relative level and Morton index. - Added
fromSubtreeandcreateEmptystatic methods toSubtreeAvailability. - Added new
setmethods toSubtreeAvailability, allowing the availability information to be modified. - Added
SubtreeFileReaderclass, used to readCesium3DTiles::Subtreefrom a binary or JSON subtree file. - Added
pointInTriangle2Dstatic method toCesiumGeometry::IntersectionTests. - Added
rectangleIsWithinPolygonsandrectangleIsOutsidePolygonsstatic methods toCartographicPolygon. - Raster overlays now use
IPrepareRasterOverlayRendererResources, which contains only overlay-related methods, instead ofIPrepareRendererResources, which contains tileset-related methods as well.IPrepareRendererResourcesderives fromIPrepareRasterOverlayRendererResourcesso existing code should continue to work without modification. - Added
collapseToSingleBufferandmoveBufferContentmethods toGltfUtilities. - Added
savePngmethod toImageManipulation. RasterOverlayTileProvider::loadTilenow returns a future that resolves when the tile is done loading.- Added
computeDesiredScreenPixelsandcomputeTranslationAndScalemethods toRasterOverlayUtilities. - Added
Future<T>::thenPassThrough, used to easily pass additional values through to the next continuation.
Fixes 🔧
- Fixed a bug in
OrientedBoundingBox::containswhere it didn't account for the bounding box's center. - Fixed compiler error when calling
PropertyAttributeView::forEachProperty. - Fixed crash when loading glTFs with data uri images.
- Fixed WD4996 warnings-as-errors when compiling with Visual Studio 2002 v17.8.
v0.29.0 - 2023-11-01
Breaking Changes 📣
- Removed
PropertyTablePropertyViewTypeandNormalizedPropertyTablePropertyViewType, as well as their counterparts for property textures and property attributes. When compiled with Clang, the largestd::variantdefinitions would significantly stall compilation.
Fixes 🔧
- Updated the Cesium ion OAuth2 URL from
https://cesium.com/ion/oauthtohttps://ion.cesium.com/oauth, avoiding a redirect.
v0.28.1 - 2023-10-02
Breaking Changes 📣
- Cesium Native is now only regularly tested on Visual Studio 2019+, GCC 11.x+, and Clang 12+. Other compilers - including older ones - are likely to work, but are not tested.
Additions 🎉
- Added
getClasstoPropertyTableView,PropertyTextureView, andPropertyAttributeView. This can be used to retrieve the metadataClassassociated with the view. - Added
PropertyViewStatus::EmptyPropertyWithDefaultto indicate when a property contains no data, but has a valid default value. - A glTF
bufferViewwith abyteStrideof zero is now treated as if thebyteStrideis 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.
Fixes 🔧
- Fixed the handling of omitted metadata properties in
PropertyTableView,PropertyTextureView, andPropertyAttributeViewinstances. Previously, if a property was notrequiredand omitted, it would be initialized as invalid with theErrorNonexistentPropertystatus. Now, it will be treated as valid as long as the property defines a validdefaultProperty. A special instance ofPropertyTablePropertyView,PropertyTexturePropertyView, orPropertyAttributePropertyViewwill be constructed to allow the property's default value to be retrieved, either viadefaultValueorget.getRawmay not be called on this special instance.
v0.28.0 - 2023-09-08
Breaking Changes 📣
- Views of the data contained by
EXT_feature_metadatawill no longer supported by Cesium Native. The extension will still be parsed, but it will log a warning. - Batch tables will be converted to
EXT_structural_metadatainstead ofEXT_feature_metadata. - In
CesiumGltf, all generated classes related toEXT_feature_metadataare now prefixed withExtensionExtFeatureMetadata. For example,ClassPropertyhas becomeExtensionExtFeatureMetadataClassProperty. This also extends to the glTF reader and writer. - In
CesiumGltf, all generated classes related toEXT_structural_metadatahave had theirExtensionExtStructuralMetadataprefix removed. For example,ExtensionExtStructuralMetadataClassPropertyhas becomeClassProperty. This also extends to the glTF reader and writer. - In
CesiumGltf,ExtensionExtMeshFeaturesFeatureIdandExtensionExtMeshFeaturesFeatureIdTexturehave been renamed toFeatureIdandFeatureIdTexturerespectively. - Replaced
FeatureIDTextureViewwithFeatureIdTextureView, which views aFeatureIdTextureinEXT_mesh_features. Feature ID textures fromEXT_feature_metadataare no longer supported. - Replaced
MetadataFeatureTableViewwithPropertyTableView, which views aPropertyTableinEXT_structural_metadata. - Replaced
MetadataPropertyViewwithPropertyTablePropertyView, which is a view of aPropertyTablePropertyinEXT_structural_metadata. This takes two template parameters: a typenameT, and aboolindicating whether or not the values are normalized. - Replaced
MetadataPropertyViewStatuswithPropertyTablePropertyViewStatus.PropertyTablePropertyViewStatusis a class that inherits fromPropertyViewStatus, defining additional error codes in the form ofstatic constvalues. - Replaced
FeatureTextureViewwithPropertyTextureView, which views aPropertyTextureinEXT_structural_metadata. - Replaced
FeatureTexturePropertyViewwithPropertyTexturePropertyView, which is a view of aPropertyTexturePropertyinEXT_structural_metadata. This takes two template parameters: a typenameT, and aboolindicating whether or not the values are normalized. - Removed
FeatureTexturePropertyComponentType,FeatureTexturePropertyChannelOffsets, andFeatureTexturePropertyValue.PropertyTexturePropertyretrieves the values with the type indicated by its class property. - Replaced
FeatureTexturePropertyViewStatuswithPropertyTexturePropertyViewStatus.PropertyTexturePropertyViewStatusis a class that inherits fromPropertyViewStatus, defining additional error codes in the form ofstatic constvalues. - Renamed
FeatureIDTextureViewStatustoFeatureIdTextureViewStatusfor consistency. - Renamed
MetadataArrayViewtoPropertyArrayView. - Renamed
FeatureTextureViewStatustoPropertyTextureViewStatus. - Refactored
PropertyTypeto reflect the values oftypein aClassPropertyfromEXT_structural_metadata.
Additions 🎉
- Added
PropertyView, which acts as a base class for all metadata property views. This takes two template parameters: a typeT, and aboolindicating whether or not the values are normalized. - Added
PropertyViewStatus, which defines publicstatic constvalues for various property errors. - Added
PropertyTableViewStatusto indicate whether aPropertyTableViewis valid. - Added
PropertyComponentTypeto reflect the values ofcomponentTypein aClassPropertyfromEXT_structural_metadata. - Added
PropertyAttributeView, which views aPropertyAttributeinEXT_structural_metadata. - Added
PropertyAttributePropertyView, which views aPropertyAttributePropertyinEXT_structural_metadata. - Added
PropertyAttributePropertyViewStatus, which reflects the status of aPropertyAttributePropertyView.
v0.27.3 - 2023-10-01
Additions 🎉
- Added support for Cesium ion
"externalType"assets.
Fixes 🔧
- Fixed corner cases where
Tileset::ComputeLoadProgresscan incorrectly report done (100%) before all tiles are actually loaded for the current view.
v0.27.2 - 2023-09-20
Additions 🎉
- Added
CESIUM_GLM_STRICT_ENABLEDoption to the CMake scripts. It is ON by default, but when set to OFF it disables theGLM_FORCE_XYZW_ONLY,GLM_FORCE_EXPLICIT_CTOR, andGLM_FORCE_SIZE_T_LENGTHoptions in the GLM library.
Fixes 🔧
- Added a missing include to
FeatureTexturePropertyView.h. - The CMake scripts no longer attempt to add the
Catch2subdirectory when the tests are disabled.
v0.27.1 - 2023-09-03
Fixes 🔧
- Fixed a bug that could cause a crash when loading tiles with a raster overlay.
v0.27.0 - 2023-09-01
Breaking Changes 📣
- Renamed
ExtensionReaderContexttoJsonReaderOptions, and thegetExtensionsmethod on various JSON reader classes togetOptions. IExtensionJsonHandlerno longer derives fromIJsonHandler. Instead, it has a new pure virtual method,getHandler, that must be implemented to allow clients to obtain theIJsonHandler. In almost all implementations, this should simply return*this.- In
SubtreeReader,SchemaReader, andTilesetReader, thereadSubtree,readSchema, andreadTilesetmethods (respectively) have been renamed toreadFromJsonand return a templatedReadJsonResultinstead of a bespoke result class. TileExternalContentis now heap allocated and stored inTileContentwith astd::unique_ptr.- The root
Tileof aCesium3DTilesSelection::Tilesetnow represents the tileset.json itself, and theroottile 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 typeTileExternalContent.
Additions 🎉
- Added new constructors to
LocalHorizontalCoordinateSystemtaking ECEF<->Local transformation matrices directly. - Unknown properties in objects read with a
JsonReaderare now stored in theunknownPropertiesproperty onExtensibleObjectby default. To ignore them, as was done in previous versions, callsetCaptureUnknownPropertiesonJsonReaderOptions. - Added
ValueTypetype alias toArrayJsonHandler, for consistency with other JSON handlers. - Added an overload of
JsonReader::readJsonthat takes arapidjson::Valueinstead of a byte buffer. This allows a subtree of arapidjson::Documentto be easily and efficiently converted into statically-typed classes viaIJsonHandler. - Added
*Readerclasses toCesiumGltfReaderandCesium3DTilesReaderto allow each of the classes to be individually read from JSON. - Added
getExternalContentmethod to theTileContentclass. TileExternalContentnow holds the metadata (schema,schemaUri,metadata, andgroups) stored in the tileset.json.- Added
loadMetadataandgetMetadatamethods toCesium3DTilesSelection::Tileset. They provide access toTilesetMetadatainstance representing the metadata associated with a tileset.json. - Added
MetadataQueryclass to make it easier to find properties with specific semantics inTilesetMetadata.
Fixes 🔧
- Fixed a bug where an empty error message would get propagated to a tileset's
loadErrorCallback. - Fixed several small build script issues to allow cesium-native to be used in Univeral Windows Platform (UWP) applications, such as those that run on Holo Lens 2.
- When KTX2 transcoding fails, the image will now be fully decompressed instead of returning an error.
- Fixed a bug that could cause higher-detail tiles to continue showing when zooming out quickly on a tileset that uses "additive" refinement.
- Fixed a bug that could cause a tile to never finish upsampling because its non-rendered parent never finishes loading.
v0.26.0 - 2023-08-01
Additions 🎉
- Added caching support for Google Maps Photorealistic 3D Tiles. Or other cases where the origin server is using combinations of HTTP header directives that previously caused tiles not to go to disk cache (such as
max-age-0,stale-while-revalidate, andExpires). - Added support for the
EXT_meshopt_compressionextension, which allows decompressing mesh data using the meshoptimizer library. Also added support for theKHR_mesh_quantizationandKHR_texture_transformextensions, which are often used together with theEXT_meshopt_compressionextension to optimize the size and performance of glTF files.
Fixes 🔧
- Fixed a bug in the 3D Tiles selection algorithm that could cause missing detail if a tileset had a leaf tile that was considered "unconditionally refined" due to having a geometric error larger than its parent's.
- Fixed a bug where
GltfReader::readImagewould always populatemipPositionswhen 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,generateMipMapswouldn't generate any mipmaps for the image.
v0.25.1 - 2023-07-03
Additions 🎉
- Included generated glTF and 3D Tiles classes in the generated referenced documentation.
- Updated the 3D Tiles class generator to use the
mainbranch instead of thedraft-1.1branch.
v0.25.0 - 2023-06-01
Additions 🎉
- Added
computeTransformationToAnotherLocalmethod toLocalHorizontalCoordinateSystem. - Added support for the
KHR_materials_variantsextension to the glTF reader and writer. - Added
GunzipAssetAccessor. It can decorate another asset accessor in order to automatically gunzip responses (if they're gzipped) even if they're missing the properContent-Encodingheader.
Fixes 🔧
- On Tileset Load Failure, warning/error messages will always be logged even if the failure callback is set.
- Fixed a bug that caused meshes to be missing entirely when upsampled from a parent with
UNSIGNED_BYTEindices.
v0.24.0 - 2023-05-01
Additions 🎉
WebMapServiceRasterOverlaynow allows query parameters in the base URL when building GetCapabilities and GetMap requests.- Added support for parsing implicit tilesets that conform to the 3D Tiles 1.1 Spec.
Fixes 🔧
- Fixed various
libjpeg-turbobuild errors, including ones that occurred when building for iOS.
v0.23.0 - 2023-04-03
Breaking Changes 📣
- Removed
tilesLoadingLowPriority,tilesLoadingMediumPriority, andtilesLoadingHighPriorityfromViewUpdateResult. UseworkerThreadTileLoadQueueLengthandmainThreadTileLoadQueueLengthinstead.
Additions 🎉
- Added
getOrientedBoundingBoxFromBoundingVolumeto theCesium3DTilesSelectionnamespace. - Added
transformandtoAxisAlignedmethods toOrientedBoundingBox. - Switched to
libjpeg-turboinstead ofstbfor faster jpeg decoding. - Added
getNumberOfTilesLoadedmethod toTileset. - Changed how
TilesetOptions::forbidHolesworks so that it loads much more quickly, while still guaranteeing there are no holes in the tileset. - Added
frameNumberproperty toViewUpdateResult. - Added getters for the
strideanddatafields ofAccessorView. - Added
startNewFramemethod toITileExcluder. - Added
CreditSystem.setShowOnScreenandTileset.setShowCreditsOnScreento allow on-screen credit rendering to be toggled at runtime.
Fixes 🔧
- Fixed a bug that caused the
centerfield ofAxisAlignedBoxto be incorrect. - Fixed a bug that caused the main thread to sometimes load low-priority tiles before high-priority ones. This could result in much longer waits than necessary for a tileset's appropriate level-of-detail to be shown.
- Fixed a bug that prevented WebP and KTX2 textures from working in the common case where only the extension specified the
sourceproperty, not the glTF's mainTexturedefinition.
v0.22.1 - 2023-03-06
Fixes 🔧
- Fixed a crash that could occur when a batch table property had fewer values than the model had features.
v0.22.0 - 2023-03-01
Breaking Changes 📣
- Renamed
CesiumGeometry::AxisTransformsto simplyTransforms. - Renamed
CesiumGeospatial::TransformstoGlobeTransforms.
Additions 🎉
- Added
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. - Added support for loading tilesets with
pntscontent. Point clouds are converted toglTFs with a singlePOINTSprimitive, while batch tables are converted toEXT_feature_metadata. - Added
createTranslationRotationScaleMatrixandcomputeTranslationRotationScaleFromMatrixmethods toCesiumGeometry::Transforms. - Added
CesiumUtility::AttributeCompressionfor encoding and decoding vertex attributes in different formats.
Fixes 🔧
- Fixed a bug that could cause holes to appear in a tileset, even with frustum culling disabled, when the tileset includes some empty tiles with a geometric error greater than their parent's.
v0.21.3 - 2023-02-01
Fixes 🔧
- Fixed a bug that could prevent loading in tilesets that are additively-refined and have external tilesets, such as Cesium OSM Buildings.
- Fixed a bug that could cause parent tiles to be incorrectly culled in tilesets with additive ("ADD") refinement. This could cause geometry to disappear when moving in closer, or fail to appear at all.
- When unloading tile content, raster overlay tiles are now detached from geometry tiles before the geometry tile content is unloaded.
- Added missing
#include <string>in generated glTF and 3D Tiles header files. - Replaced
std::sprintfwithstd::snprintf, fixing a warning-as-error in newer versions of Xcode. - Upgraded tinyxml2 from commit 1aeb57d26bc303d5cfa1a9ff2a331df7ba278656 to commit e05956094c27117f989d22f25b75633123d72a83.
v0.21.2 - 2022-12-09
Additions 🎉
- Added the ability to specify the endpoint URL of the Cesium ion API when constructing an
IonRasterOverlay.
Fixes 🔧
- Removed the logged warning about the use of the
gltfUpAxisproperty 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.
v0.21.1 - 2022-12-02
Fixes 🔧
- Fixed a bug that could cause an assertion failure - and on rare occasions a more serious problem - when creating a tile provider for a
TileMapServiceRasterOverlayor aWebMapServiceRasterOverlay.
v0.21.0 - 2022-11-01
Breaking Changes 📣
- On
IPrepareRendererResources, theimageparameter passed toprepareRasterInLoadThreadand therasterTileparameter passed toprepareRasterInMainThreadare no longer const. These methods are now allowed to modify the parameters during load. IPrepareRendererResources::prepareInLoadThreadnow takes aTileLoadResultand returns aFuture<TileLoadResultAndRenderResources>, allowing it to work asynchronously rather than just blocking a worker thread until it is finished.RasterOverlay::createTileProvidernow takes the owner pointer as anIntrusivePointerinstead of a raw pointer, and returns a future that resolves to aRasterOverlay::CreateTileProviderResult.
Additions 🎉
- Added
mainThreadLoadingTimeLimitandtileCacheUnloadTimeLimitproperties toTilesetOptions, allowing a limit to be placed on how much time is spent loading and unloading tiles per frame. - Added
GltfReader::generateMipMapsmethod. - Added the
getImagemethod toRasterOverlayTile. - Added
LocalHorizontalCoordinateSystem, which is used to create convenient right- or left-handeded coordinate systems with an origin at a point on the globe.
Fixes 🔧
- Fixed a bug that could cause a crash when adding raster overlays to sparse tilesets and zooming close enough to cause them to be upsampled.
v0.20.0 - 2022-10-03
Breaking Changes 📣
TileRenderContent::lodTransitionPercentagenow always goes from 0.0 --> 1.0 regardless of if the tile is fading in or out.- Added a new parameter to
IPrepareRendererResources::prepareInLoadThread,rendererOptions, to allow passing arbitrary data from the renderer.
Fixes 🔧
- In
CesiumGltfWriter,accessor.byteOffsetandbufferView.byteOffsetare 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. - Fixed a bug where failed tiles don't clean up any raster overlay tiles that are mapped to them, and therefore cannot be rendered as empty tiles.
- Fixed a bug that prevented access to Cesium Ion assets by using expired Access Tokens.
v0.19.0 - 2022-09-01
Breaking Changes 📣
RasterOverlayCollectionno longer accepts aTilesetin its constructor. Instead, it now accepts aTile::LoadedLinkListand aTilesetExternals.- Removed
TileContext. It has been replaced by theTilesetContentLoaderinterface. - Removed
TileContentFactory. Instead, conversions of various types to glTF can be registered withGltfConverters. - Removed
TileContentLoadInput. It has been replaced byTileLoadInputandTilesetContentLoader. - Removed
TileContentLoadResult. It has been replaced byTileContent. - Removed
TileContentLoader. It has been replaced byTilesetContentLoaderandGltfConverters. - Removed
ImplicitTraversal. It has been replaced byTilesetContentLoaderandGltfConverters. - Removed many methods from the
Cesium3DTilesSelection::Tilesetclass:getUrl(),getIonAssetID(),getIonAssetToken(),notifyTileStartLoading,notifyTileDoneLoading(),notifyTileUnloading(),loadTilesFromJson(),requestTileContent(),requestAvailabilitySubtree(),addContext(), andgetGltfUpAxis(). Most of these were already not recommended for use outside of cesium-native. - Removed many methods from the
Cesium3DTilesSelection::Tileclass:getTileset(),getContext(),setContext(),getContent(),setEmptyContent(),getRendererResources(),setState(),loadContent(),processLoadedContent(),unloadContent(),update(), andmarkPermanentlyFailed(). Most of these were already not recommended for use outside of cesium-native.
Additions 🎉
- Quantized-mesh terrain and implicit octree and quadtree tilesets can now skip levels-of-detail when traversing, so the correct detail is loaded more quickly.
- Added new options to
TilesetOptionssupporting smooth transitions between tiles at different levels-of-detail. A tile's transition percentage can be retrieved fromTileRenderContent::lodTransitionPercentage. - Added support for loading WebP images inside glTFs and raster overlays. WebP textures can be provided directly in a glTF texture or in the
EXT_texture_webpextension. - Added support for
KHR_texture_transformtoCesiumGltf,CesiumGltfReader, andCesiumGltfWriter Tilesetcan be constructed with aTilesetContentLoaderand a rootTilefor loading and rendering different 3D Tile-like formats or creating a procedural tileset.
Fixes 🔧
- Fixed a bug where the Raster Overlay passed to the
loadErrorCallbackwould not be the one that the user created, but instead an aggregated overlay that was created internally.
v0.18.1 - 2022-08-04
Fixes 🔧
- Fixed a bug in
SqliteCachewhere 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.
v0.18.0 - 2022-08-01
Breaking Changes 📣
- Removed support for 3D Tiles Next extensions in
TilesetWriterandTilesetReaderthat have been promoted to core in 3D Tiles 1.1 - Removed the
getSupportsRasterOverlaysfromTilesetbecause the property is no longer relevant now that all tilesets support raster overlays.
Additions 🎉
- Added support for 3D Tiles 1.1 in
TilesetWriterandTilesetReader. - Added a
TileOcclusionRendererProxyPooltoTilesetExternals. 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. Tilesetcan now estimate the percentage of the tiles for the current view that have been loaded by calling thecomputeLoadProgressmethod.- Enabled loading Tile Map Service (TMS) URLs that do not have a file named "tilemapresource.xml", such as from GeoServer.
- Added support for Tile Map Service documents that use the "local" profile when the SRS is mercator or geodetic.
v0.17.0 - 2022-07-01
Fixes 🔧
- Fixed crash when parsing an empty copyright string in the glTF model.
v0.16.0 - 2022-06-01
Additions 🎉
- Added option to the
RasterizedPolygonsOverlayto invert the selection, so everything outside the polygons gets rasterized instead of inside. - The
RasterizedPolygonsTileExcluderexcludes tiles outside the selection instead of inside when given an invertedRasterizedPolygonsOverlay. - Tiles are now upsampled using the projection of the first raster overlay in the list with more detail.
Fixes 🔧
- For consistency with CesiumJS and compatibility with third-party terrain tilers widely used in the community, the
boundsproperty of thelayer.jsonfile of a quantized-mesh terrain tileset is now ignored, and the terrain is assumed to cover the entire globe.
v0.15.2 - 2022-05-13
Fixes 🔧
- Fixed a bug where upsampled quadtree tiles could have siblings with mismatching projections.
In addition to the above, this release updates the following third-party libraries used by cesium-native:
cpp-httplibto v0.10.3 (changes)dracoto v1.5.2 (changes)earcutto v2.2.3 (changes)PicoSHA2to commit1677374f23352716fc52183255a40c1b8e1d53eb(changes)rapidjsonto commitfcb23c2dbf561ec0798529be4f66394d3e4996d8(changes)spdlogto v1.10.0 (changes)stbto commitaf1a5bc352164740c1cc1354942b1c6b72eacb8a(changes)uriparserto v0.9.6 (changes)
v0.15.1 - 2022-05-05
Fixes 🔧
- Fixed a bug that could cause tiles in external tilesets to fail to load.
v0.15.0 - 2022-05-02
Additions 🎉
- Improved the load performance when
TilesetOptions::forbidHolesis enabled by only loading child tiles when their parent does not meet the necessary screen-space error requirement. - Added support for loading availability metadata from quantized-mesh layer.json. Previously, only availability embedded in terrain tiles was used.
- Added support for quantized-mesh terrain tilesets that specify a parent layer.
- Added support for metadata from the
3DTILES_batch_table_hierarchyextension.
Fixes 🔧
- Fixed a bug that could cause the same tiles to be continually loaded and unloaded when
TilesetOptions::forbidHoleswas enabled. - Fixed a bug that could sometimes cause tilesets to fail to show their full detail when making changes to raster overlays.
- Fixed a bug that could cause holes even with
TilesetOptions::forbidHolesenabled, particularly when using external tilesets. - Tiles will no longer be selected to render when they have no content and they have a higher "geometric error" than their parent. In previous versions, this situation could briefly lead to holes while the children of such tiles loaded.
- Fixed a bug where
IPrepareRendererResources::prepareInMainThreadwas called on aTilebefore thatTilewas updated with loaded content. - Fixed a bug where getting bad data from the SQLite request cache could cause a crash. If the SQLite database is corrupt, it will now be deleted and recreated.
v0.14.1 - 2022-04-14
Fixes 🔧
- Fixed a crash caused by using an aggregated overlay of
IonRasterOverlayafter it is freed. - Fix a bug introduced in v0.14.0 that caused Tile Map Service (TMS) overlays from Cesium ion to fail to load.
v0.14.0 - 2022-04-01
Breaking Changes 📣
- Added a new parameter,
rendererOptions, toIPrepareRendererResources::prepareRasterInLoadThread. - Changed the type of Cesium ion asset IDs from
uint32_ttoint64_t. - Various changes in the
Cesium3DTiles,Cesium3DTilesReader, andCesium3DTilesWriternamespaces to match the evolving 3D Tiles Next specifications. - Removed
getTextureCoordinateIndexfromFeatureIDTextureViewandFeatureTexturePropertyView. UsegetTextureCoordinateAttributeIdinstead.
Additions 🎉
- Added
WebMapServiceRasterOverlayto pull raster overlays from a WMS server. - Added support for the following glTF extensions to
CesiumGltf,CesiumGltfReader, andCesiumGltfWriter:EXT_instance_featuresEXT_structural_metadataMAXAR_mesh_variants
- Added an in-memory cache for Cesium ion asset endpoint responses in order to avoid repeated requests.
- Added
ScopeGuardclass to automatically a execute function when exiting a scope. - The glTF
copyrightproperty, if present, is now included in the credits thatTilesetadds to theCreditSystem. If thecopyrighthas multiple parts separate by semicolons, these are treated as separate credits. - Credits reported by
CreditSystem::getCreditsToShowThisFrameare now sorted based on the number of occurrences, with the most common credits first. TilesetandRasterOverlaycredits can now be shown on the screen, rather than in a separate credit popup.- Added
FeatureTexturePropertyView::getSwizzlemethod. - Added
IsMetadataArraytemplate to check if a type is aMetadataArrayView. - Added a
rendererOptionsproperty toRasterOverlayOptionsto pass arbitrary data toprepareRasterInLoadThread. - Added
Uri::escape.
Fixes 🔧
- Fixed an issue that could lead to compilation failures when passing an lvalue reference to
Promise::resolve(). - Fixed upsampling for
EXT_feature_metadatafeature tables. - Fixed a bug that could cause the size of external images to be accounted for incorrectly when tracking the number of bytes loaded for caching purposes.
- Fixed a bug that prevented tiles from loading when "Forbid Holes" option was enabled.
v0.13.0 - 2022-03-01
Breaking Changes 📣
- Renamed constants in
CesiumUtility::Mathto use PascalCase instead of SCREAMING_SNAKE_CASE.
Additions 🎉
- Added support for the
CESIUM_RTCandKHR_texture_basisuglTF extensions. - Added support for 3D Tiles that do not have a geometric error, improving compatibility with tilesets that don't quite match the 3D Tiles spec.
- Exposed the Cesium ion endpoint URL as a parameter on tilesets and raster overlays.
TilesetOptionsandRasterOverlayOptionseach 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.- The
ImageCesiumclass nows convey which GPU pixel compression format (if any) is used. This informs what to expect in the image's pixel buffer. - The
ImageCesiumclass 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 inImageCesium::mipPositions. - Tileset content with the known file extensions ".gltf", ".glb", and ".terrain" can now be loaded even if the Content-Type is incorrect. This is especially helpful for loading tilesets from
file:URLs. - Created tighter fitting bounding volumes for terrain tiles by excluding skirt vertices.
Fixes 🔧
- Fixed bug that could cause properties types in a B3DM Batch Table to be deduced incorrectly, leading to a crash when accessing property values.
- Fixed a bug where implicit tiles were not receiving the root transform and so could sometimes end up in the wrong place.
v0.12.0 - 2022-02-01
Breaking Changes 📣
- Renamed
IAssetAccessor::requestAssettoget. - Renamed
IAssetAccessor::posttorequestand added a new parameter in the second position to specify the HTTP verb to use. TokeninCesiumIonClienthas been updated to match Cesium ion's v2 REST API endpoint, so several fields have been renamed. Thetokensmethod also now returns future that resolves to aTokenListinstead of a plain vector ofTokeninstances.- Renamed
GltfReader::readModel,ModelReaderResult, andReadModelOptionstoGltfReader::readGltf,GltfReaderResult, andGltfReaderOptionsrespectively. - Removed
writeModelAsEmbeddedBytes,writeModelAndExternalFiles,WriteModelResult,WriteModelOptions, andWriteGLTFCallback. UseGltfWriter::writeGltf,GltfWriter::writeGlb,GltfWriterResult, andGltfWriterOptionsinstead.
Additions 🎉
- Added
TilesetWriterOptionsfor serializing tileset JSON. - Added support for the following extensions in
GltfWriterandGltfReader: - Added support for the following extensions in
TilesetWriterandTilesetReader: - Added
SubtreeWriterandSubtreeReaderfor serializing and deserializing the subtree format in 3DTILES_implicit_tiling. - Added
SchemaWriterandSchemaReaderfor serializing and deserializing schemas in EXT_mesh_features and 3DTILES_metadata. - Added
hasExtensiontoExtensibleObject. - Added
CESIUM_TESTS_ENABLEDoption to the build system. - Added support in the JSON reader for reading doubles with no fractional value as integers.
- Added case-insensitive comparison for Cesium 3D Tiles "refine" property values.
- Added new capabilities to
ConnectioninCesiumIonClient:- The
tokensmethod now uses the v2 service endpoint and allows a number of options to be specified. - Added a
tokenmethod to allow details of a single token to be retrieved. - Added
nextPageandpreviousPagemethods to allow paging through tokens. - Added
modifyTokenmethod. - Added static
getIdFromTokenmethod to obtain a token ID from a given token value.
- The
- Added
loadErrorCallbacktoTilesetOptionsandRasterOverlayOptions. This callback is invoked when theTilesetorRasterOverlayencounter a load error, allowing the error to be handled by application code. - Enable
IntrusivePointer<T>to be converted toIntrusivePointer<U>if U is a base class of T.
Fixes 🔧
- Fixes a bug where
notifyTileDoneLoadingwas not called when encountering Ion responses that can't be parsed. - Fixed a bug that prevented a continuation attached to a
SharedFuturefrom returning aFutureitself. - Fixed incorrect child subtree index calculation in implicit tiles.
- Fixed
computeDistanceSquaredToPositioninBoundingSphere.
v0.11.0 - 2022-01-03
Breaking Changes 📣
- The
CesiumGltfReaderproject now uses theCesiumGltfReadernamespace instead of theCesiumGltfnamespace. - The
CesiumGltfWriterproject now uses theCesiumGltfWriternamespace instead of theCesiumGltfnamespace. - The
Cesium3DTilesReaderproject now uses theCesium3DTilesReadernamespace instead of theCesium3DTilesnamespace.
Additions 🎉
- Added
Cesium3DTilesWriterlibrary.
Fixes 🔧
- Fixed a bug in
QuadtreeRasterOverlayTileProviderthat 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.
v0.10.0 - 2021-12-01
Breaking Changes 📣
QuadtreeRasterOverlayTileProvider::computeLevelFromGeometricErrorhas been removed.computeLevelFromTargetScreenPixelsmay be useful as a replacement.- The constructor of
RasterOverlayTileProvidernow requires a coverage rectangle. RasterOverlayTileProvider::getTilenow takes atargetScreenPixelsinstead of atargetGeometricError.- The constructor of
RasterMappedTo3DTilenow requires a texture coordinate index. - The constructor of
RasterOverlayTilenow takes atargetScreenPixelsinstead of atargetGeometricError. And the correspondinggetTargetGeometricErrorhas been removed. - Removed
TileContentLoadResult::rasterOverlayProjections. This field is now found in theoverlayDetails. - Removed
obtainGlobeRectanglefromTileUtilities.h. UseestimateGlobeRectangleinBoundingVolume.hinstead. - cesium-native now uses the following options with the
glmlibrary:GLM_FORCE_XYZW_ONLYGLM_FORCE_EXPLICIT_CTORGLM_FORCE_SIZE_T_LENGTH
Additions 🎉
- Added support for the 3DTILES_implicit_tiling extension.
- Added support for the 3DTILES_bounding_volume_S2 extension.
- Added support for raster overlays, including clipping polygons, on any 3D Tiles tileset.
- Added support for external glTF buffers and images.
- Raster overlay level-of detail is now selected using "target screen pixels" rather than the hard-to-interpret geometric error value.
- A
RasterOverlaycan now be configured with amaximumScreenSpaceErrorindependent of the screen-space error used for the geometry. RasterOverlay::loadTileProvidernow returns aSharedFuture, making it easy to attach a continuation to run when the load completes.- Added
GltfContent::applyRtcCenterandapplyGltfUpAxisTransform. - Clipping polygon edges now remain sharp even when zooming in past the available geometry detail.
- Added
DebugColorizeTilesRasterOverlay. - Added
BoundingRegionBuildertoCesiumGeospatial. - Added
GlobeRectangle::EMPTYstatic field andGlobeRectangle::isEmptymethod. - Added the ability to set the coordinates of a
GlobeRectangleafter construction.
Fixes 🔧
- Improved the computation of bounding regions and overlay texture coordinates from geometry, particularly for geometry that crosses the anti-meridian or touches the poles.
- Fixed a bug that would result in incorrect geometry when upsampling a glTF with a position accessor pointing to a bufferView that did not start at the beginning of its buffer.
- Fixed a problem that could cause incorrect distance computation for a degenerate bounding region that is a single point with a min/max height.
- Improved the numerical stability of
GlobeRectangle::computeCenterandGlobeRectangle::contains. - Error messages are no longer printed to the Output Log when an upsampled tile happens to have a primitive with no vertices.
- Fixed a bug that could cause memory corruption when a decoded Draco mesh was larger than indicated by the corresponding glTF accessor.
- Fixed a bug that could cause the wrong triangle indices to be used for a Draco-encoded glTF.
v0.9.0 - 2021-11-01
Breaking Changes 📣
- Changed the following properties in CesiumGltf:
BufferView::targetnow defaults tostd::nulloptinstead ofTarget::ARRAY_BUFFER.ClassProperty::typenow defaults toType::INT8instead of empty string.ClassProperty::componentTypeis now an optional string instead of aJsonValue.FeatureTexture::classPropertyis no longer optional, consistent with changes to the extension spec.Image::mimeTypenow defaults to empty string instead ofMimeType::image_jpeg.Sampler::magFilterandSampler::minFilternow default tostd::nulloptinstead ofMagFilter::NEAREST.
- The version of
ExtensibleObjectin theCesiumGltflibrary and namespace has been removed. Use the one in theCesiumUtilitylibrary and namespace instead. - Renamed the following glTF extension classes:
KHR_draco_mesh_compression->ExtensionKhrDracoMeshCompression.MeshPrimitiveEXT_feature_metadata->ExtensionMeshPrimitiveExtFeatureMetadataModelEXT_feature_metadata->ExtensionModelExtFeatureMetadata
CesiumGltf::ReaderContexthas been removed. It has been replaced with eitherCesiumJsonReader::ExtensionReaderContextorGltfReader.
Additions 🎉
- Added new
Cesium3DTilesandCesium3DTilesReaderlibraries. They are useful for reading and working with 3D Tiles tilesets.
Fixes 🔧
- Fixed a bug that could cause crashes or incorrect behavior when using raster overlays.
- Fixed a bug that caused 3D Tiles content to fail to load when the status code was zero. This code is used by libcurl for successful read of
file://URLs, so the bug prevented loading from such URLs in some environments. - Errors and warnings that occur while loading glTF textures are now include in the model load errors and warnings.
- Fixes how
generate-classesdeals 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.
v0.8.0 - 2021-10-01
Breaking Changes 📣
- glTF enums are now represented in CesiumGltf as their underlying type (int32 or string) rather than as an enum class.
- Tile content loaders now return a
Future, which allows them to be asynchronous and make further network requests.
Fixes 🔧
- Fixed a bug that caused the
RTC_CENTERsemantic 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.
v0.7.2 - 2021-09-14
Fixes 🔧
- Fixed a bug where the "forbidHoles" option was not working with raster overlays and external tilesets.
v0.7.1 - 2021-09-14
Fixes 🔧
- Fixed a bug introduced in v0.7.0 where credits from a
QuadtreeRasterOverlayTileProviderwere not collected and reported. - Fixed a bug where disabling frustum culling caused external tilesets to not load.
v0.7.0 - 2021-09-01
Breaking Changes 📣
- Renamed the
Cesium3DTilesnamespace and library toCesium3DTilesSelection. - Deleted
Cesium3DTilesSelection::Gltfand moved functionality intoCesiumGltf::Model. - Renamed
Rectangle::intersectandGlobeRectangle::intersecttocomputeIntersection. RasterOverlayand derived classes now require anameparameter to their constructors.- Changed the type of texture coordinate IDs used in the raster overlay system from
uint32_ttoint32_t. RasterOverlayTileProvideris 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 fromRasterOverlayTileProvidershould now derive fromQuadtreeRasterOverlayTileProviderand implementloadQuadtreeTileImageinstead ofloadTileImage.- Removed
TilesetOptions::enableWaterMask, which didn't have any effect anyway.TilesetContentOptions::enableWaterMaskstill exists and works.
Additions 🎉
- Added
Future<T>::isReady. - Added
Future<T>::share, which returns aSharedFuture<T>and allows multiple continuations to be attached. - Added an option in
TilesetOptions::ContentOptionsto generate smooth normals when the original glTFs were missing normals. - Added
ImageManipulationclass toCesiumGltfReader. - Added
Math::roundUpandMath::roundDown. - Added
Rectangle::computeUnion.
Fixes 🔧
- Fixed a bug that caused CesiumGltfWriter to write a material's normal texture info into a property named
normalTextureInforather thannormalTexture. - Fixed a bug in
TileMapServiceRasterOverlaythat caused it to show only the lowest resolution tiles if missing atilemapresource.xmlfile.
v0.6.0 - 2021-08-02
Breaking Changes 📣
Future<T>::waitnow returns the resolved value and throws if the Future rejected, rather than returning astd::variantand slicing the exception tostd::exception.Tileset::updateViewandTileset::updateViewOfflinenow takestd::vector<ViewState>instead of a singleViewState.
Additions 🎉
- Added support for the
EXT_feature_metadataglTF extension. - Added automatic conversion of the B3DM batch table to the
EXT_feature_metadataextension. - Added
CESIUM_COVERAGE_ENABLEDoption to the build system. - Added
AsyncSystem::dispatchOneMainThreadTaskto dispatch a single task, rather than all the tasks that are waiting. - Added
AsyncSystem::createPromiseto create a Promise directly, rather than via a callback as inAsyncSystem::createFuture. - Added
AsyncSystem::catchImmediatelyto catch a Future rejection immediately in any thread. - Added
AsyncSystem::allto create a Future that resolves when a list of Futures resolve. - Added support for multiple frustums in the
Tilesetselection algorithm.
Fixes 🔧
- Fixed a bug that prevented
.thenfunctions from being used on aFuture<void>when CESIUM_TRACING_ENABLED was ON.
v0.5.0 - 2021-07-01
Breaking Changes 📣
TilesetExternalsnow has anAsyncSysteminstead of a shared pointer to anITaskProcessor.
Additions 🎉
- Added a performance tracing framework via
CESIUM_TRACE_*macros. - Added
Future<T>::thenImmediately. - Added
AsyncSystem::createThreadPoolandFuture<T>::thenInThreadPool. Future<T>::thenInWorkerThreadandFuture<T>::thenInMainThreadnow arrange for their continuations to be executed immediately when the Future is resolved, if the Future is resolved in the correct thread.- Moved all request cache database access to a dedicated thread, in order to free up worker threads for parallelizable work.
v0.4.0 - 2021-06-01
Additions 🎉
- Added
Cesium3DTiles::TileIdUtilitieswith acreateTileIdStringfunction to create logging/debugging strings forTileIDobjects. - Accessing the same Bing Maps layer multiple times in a single application run now reuses the same Bing Maps session instead of starting a new one each time.
- Added a configure-time build option,
PRIVATE_CESIUM_SQLITE, to rename allsqlite3*symbols tocesium_sqlite3*.
Fixes 🔧
- Matched draco's decoded indices to gltf primitive if indices attribute does not match with the decompressed indices.
createAccessorViewnow creates an (invalid)AccessorViewwith a standard numeric type on error, rather than creatingAccessorView<nullptr_t>. This makes it easier to use a simple lambda as the callback.- Disabled
HTTPLIB_USE_ZLIB_IF_AVAILABLEandHTTPLIB_USE_OPENSSL_IF_AVAILABLEbecause these libraries are not required for our use for cpp-httplib and they cause problems on some systems.
v0.3.1 - 2021-05-13
Fixes 🔧
- Fixed a memory leak when loading textures from a glTF model.
- Fixed a use-after-free bug that could cause a crash when destroying a
RasterOverlay.
v0.3.0 - 2021-05-03
Breaking Changes 📣
- Converted
magic_enum/CodeCoverage.cmakedependencies to external submodules. - Replaced
CesiumGltf::WriteFlagsbitmask withCesiumGltf::WriteModelOptionsstruct.CesiumGltf::writeModelAsEmbeddedBytesandCesiumGltf::writeModelAndExternalfilesnow use this struct for configuration. - Removed all exceptions in
WriterException.h, warnings / errors are now reported inWriteModelResult, which is returned fromCesiumGltf::writeModelAsEmbeddedBytesandCesiumGltf::writeModelAndExternalFilesinstead.
Additions 🎉
- Added support for loading the water mask from quantized-mesh terrain tiles.
Fixes 🔧
- Let a tile be renderable if all its raster overlays are ready, even if some are still loading.
v0.2.0 - 2021-04-19
Breaking Changes 📣
- Moved
JsonValuefrom theCesiumGltflibrary to theCesiumUtilitylibrary and changes some of its methods. - Renamed
CesiumGltf::ReadertoCesiumGltf::GltfReader. - Made the
readModelandreadImagemethods onGltfReaderinstance methods instead of static methods.
Additions 🎉
- Added
CesiumGltfWriterlibrary. - Added
CesiumJsonReaderlibrary. - Added diagnostic details to error messages for invalid glTF inputs.
- Added diagnostic details to error messages for failed OAuth2 authorization with
CesiumIonClient::Connection. - Added an
Axisenum andAxisTransformsclass for coordinate system transforms - Added support for the legacy
gltfUpVectorstring property in theassetpart of tilesets. The up vector is read and passed as anAxisin theextras["gltfUpVector"]property, so that receivers may rotate the glTF model's up-vector to match the Z-up convention of 3D Tiles. - Unknown glTF extensions are now deserialized as a
JsonValue. Previously, they were ignored. - Added the ability to register glTF extensions for deserialization using
GltReader::registerExtension. - Added
GltfReader::setExtensionState, which can be used to request that an extension not be deserialized or that it be deserialized as aJsonValueeven though a statically-typed class is available for the extension.
Fixes 🔧
- Gave glTFs created from quantized-mesh terrain tiles a more sensible material with a
metallicFactorof 0.0 and aroughnessFactorof 1.0. Previously the default glTF material was used, which has ametallicFactorof 1.0, leading to an undesirable appearance. - Reported zero-length images as non-errors as
BingMapsRasterOverlaypurposely requests that the Bing servers return a zero-length image for non-existent tiles. - 3D Tiles geometric error is now scaled by the tile's transform.
- Fixed a bug that that caused a 3D Tiles tile to fail to refine when any of its children had an unsupported type of content.
v0.1.0 - 2021-03-30
- Initial release.