- Added support for
EXT_accessor_additional_types
inAccessorView
. - Added
EllipsoidTilesetLoader
that will generate a tileset by tesselating the surface of an ellipsoid, producing a simple globe tileset without any terrain features.
- Updated the CMake install process to install the vcpkg-built Debug binaries in Debug builds. Previously the Release binaries were installed instead.
- Renamed
CesiumUtility/Gunzip.h
toCesiumUtility/Gzip.h
. - Renamed
ImageCesium
toImageAsset
. - The
cesium
field inCesiumGltf::Image
is now namedpAsset
and is anIntrusivePointer
to anImageAsset
. - The
image
field inLoadedRasterOverlayImage
is now namedpImage
and is anIntrusivePointer
to anImageAsset
. - Deprecated the
readImage
andgenerateMipMaps
methods onGltfReader
. These methods are now found onImageDecoder
.
- Added
CesiumUtility::gzip
. - Added
CesiumGeometry::Transforms::getUpAxisTransform
to get the transform that converts from one up axis to another. - Added
TilesetSharedAssetSystem
toCesium3DTilesSelection
andGltfSharedAssetSystem
toCesiumGltfReader
. - Added
SharedAsset
toCesiumUtility
to serve as the base class for assets such asImageAsset
. - Added
SharedAssetDepot
toCesiumAsync
for managing assets, such as images, that can be shared among multiple models or other objects. - Added
NetworkAssetDescriptor
andNetworkImageAssetDescriptor
. ImageAsset
(formerlyImageCesium
) is now anExtensibleObject
.- Added
VertexAttributeSemantics
toCesiumGltf
. - Added
ImageDecoder
toCesiumGltfReader
. - Added
DoublyLinkedListAdvanced
toCesiumUtility
. It is equivalent toDoublyLinkedList
except it allows the next and previous pointers to be in a base class of the node class. - Added
contains
method toDoublyLinkedList
(andDoublyLinkedListAdvanced
). - Added static
error
andwarning
methods toErrorList
, making it easy to create an instance with a single error or warning. ExtensibleObject::addExtension
now takes arguments that are passed through to the extension's constructor.- Added
Hash
toCesiumUtility
. - Added
emplace
andreset
methods toIntrusivePointer
. - Added
Result<T>
andResultPointer<T>
classes to represent the result of an operation that might complete with warnings and errors.
- Fixed missing ellipsoid parameters that would lead to incorrect results when using non-WGS84 ellipsoids.
- Fixed a bug in
AsyncSystem::all
where the resolved values of individual futures were copied instead of moved into the output array. - Improved the hash function for
QuadtreeTileID
.
- Fixed a regression in v0.40.0 that could cause tilesets with raster overlays to fail to load in some cases.
- Renamed
shouldContentContinueUpdating
togetMightHaveLatentChildren
andsetContentShouldContinueUpdating
tosetMightHaveLatentChildren
on theTile
class. LoadedRasterOverlayImage
now has a singleerrorList
property instead of separateerrors
andwarnings
properties.
- Added
sampleHeightMostDetailed
method toTileset
. AxisAlignedBox
now hasconstexpr
constructors.
- Fixed a bug that prevented use of
Tileset
with a nullptrIPrepareRendererResources
. - Fixed a bug in
IntersectionTests::rayOBBParametric
that could cause incorrect results for some oriented bounding boxes. GltfUtilities::intersectRayGltfModel
now reports a warning when given a model it can't compute the intersection with because it uses required extensions that are not supported.- 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
catchImmediately
andcatchInMainThread
functions inCesiumAsync
that prevented use of a mutable lambda.
- Setting the CMake variable
PRIVATE_CESIUM_SQLITE
will no longer automatically rename all of the SQLite symbols. It must also be paired with a vcpkg overlay port that renames the symbols in SQLite itself. PropertyArrayView
is now exclusively a view, with no ability to own the data it is viewing. The newPropertyArrayCopy
can be used when an owning view is required.
- Added
CesiumGltfWriter::SchemaWriter
for serializing schemas in EXT_structural_metadata. - Added
resolveExternalImages
flag toGltfReaderOptions
, which is true by default. - Added
removeExtensionUsed
andremoveExtensionRequired
methods toCesiumGltf::Model
. - Added
getFeatureIdAccessorView
overload for retrieving feature IDs fromEXT_instance_features
. - Added
CesiumGeospatial::EarthGravitationalModel1996Grid
class to allow transforming heights on a WGS84 ellipsoid into heights above mean sea level using the EGM96 model.
- Fixed a bug in
WebMapTileServiceRasterOverlay
that caused it to compute theTileRow
incorrectly when used with a tiling scheme with multiple tiles in the Y direction at the root. KHR_texture_transform
is now removed fromextensionsUsed
andextensionsRequired
after it is applied byGltfReader
.- Fixed a bug in the i3dm loader that caused glTF with multiple nodes to not be instanced correctly.
AccessorWriter
constructor now takesstd::byte*
instead ofuint8_t*
.
- Added
rayTriangle
intersection function that returns the intersection point between a ray and a triangle. - Added
intersectRayGltfModel
intersection 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
.
- Fixed a bug that prevented raster overlays from being correctly applied when a non-standard "glTF up axis" is in use.
- Added full support for custom ellipsoids by setting
TilesetOptions::ellipsoid
when 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_ELLIPSOID
can be defined to disable the WGS84 default parameter, exposing through errors the places in your code that are still assuming a WGS84 ellipsoid.
- Added
removeUnusedMeshes
andremoveUnusedMaterials
toGltfUtilities
. - Added
rayEllipsoid
static method toCesiumGeometry::IntersectionTests
. - Added equality operator for
Cartographic
. - Added
CESIUM_MSVC_STATIC_RUNTIME_ENABLED
option to the CMake scripts. It is OFF by default, and when enabled, configures any MS visual studio projects for the "Multi-threaded" (/MT) runtime library rather than "Multi-threaded DLL" (/MD)
- 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
gltfUpAxis
property 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::pointInTriangle
that 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.
FeatureId::propertyTable
is nowint32_t
instead ofstd::optional<int64_t>
ExtensionMeshPrimitiveExtStructuralMetadata::propertyTextures
andExtensionMeshPrimitiveExtStructuralMetadata::propertyAttributes
are now vectors ofint32_t
instead ofint64_t
.
- Added support for I3DM 3D Tile content files.
- Added
forEachNodeInScene
toCesiumGltf::Model
. - Added
removeUnusedBuffers
toGltfUtilities
. - Added the following new methods to the
Uri
class:unescape
,unixPathToUriPath
,windowsPathToUriPath
,nativePathToUriPath
,uriPathToUnixPath
,uriPathToWindowsPath
, anduriPathToNativePath
. - Added
LayerWriter
to theCesiumQuantizedMeshTerrain
library and namespace. - Drastically improved the performance of
GltfUtilities::collapseToSingleBuffer
for glTFs with many buffers and bufferViews.
- Added support for the following glTF extensions to
Model::merge
. Previously these extensions could end up broken after merging.KHR_texture_basisu
EXT_texture_webp
EXT_mesh_gpu_instancing
EXT_meshopt_compression
CESIUM_primitive_outline
CESIUM_tile_edges
- Fixed a bug in
GltfUtilities::compactBuffer
where it would not preserve the alignment of the bufferViews. - The
collapseToSingleBuffer
andmoveBufferContent
functions inGltfUtilities
now align to an 8-byte boundary rather than a 4-byte boundary, because bufferViews associated with some glTF extensions require this larger alignment. GltfUtilities::collapseToSingleBuffer
now works correctly even if some of the buffers in the model have auri
property and the data at that URI has not yet been loaded. Such buffers are left unmodified.GltfUtilities::collapseToSingleBuffer
now works correctly with bufferViews that have theEXT_meshopt_compression
extension.GltfUtilities::compactBuffer
now accounts for bufferViews with theEXT_meshopt_compression
when determining unused buffer ranges.- When
GltfReader
decodes buffers with data URLs, and the size of the data in the URL does not match the buffer'sbyteLength
, thebyteLength
is now updated and a warning is raised. Previously, the mismatch was ignored and would cause problems later when trying to use these buffers. EXT_meshopt_compression
andKHR_mesh_quantization
are now removed fromextensionsUsed
andextensionsRequired
after they are decoded byGltfReader
.- The glTF accessor for the texture coordinates created by
RasterOverlayUtilities::createRasterOverlayTextureCoordinates
now has min/max values that accurately reflect the range of values. Previously, the minimum was always set to 0.0 and the maximum to 1.0. - Fixed a bug in the
waitInMainThread
method onFuture
andSharedFuture
that 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
absl
namespace to thecesium_s2geometry_absl
namespace, in order to avoid linker errors when linking against both cesium-native and the full Abseil library. - Fixed a crash in
ExtensionWriterContext
when attempting to write statically-typed extensions that aren't registered. Now a warning is reported.
- Moved
upsampleGltfForRasterOverlays
intoRasterOverlayUtilities
. Previously it was a global function. Also added two new parameters to it, prior to the existingtextureCoordinateIndex
parameter. - Moved
QuantizedMeshLoader
fromCesium3DTilesContent
toCesiumQuantizedMeshTerrain
. If experiencing related linker errors, addCesiumQuantizedMeshTerrain
to the libraries you link against. Connection::authorize
now requires anApplicationData
parameter, which represents theappData
retrieved from a Cesium ion server.
- Added a new
CesiumQuantizedMeshTerrain
library and namespace, containing classes for working with terrain in thequantized-mesh-1.0
format and itslayer.json
file. - Added
getComponentCountFromPropertyType
toPropertyType
. - Added
removeExtension
toExtensibleObject
. - Added
IndexFromAccessor
to retrieve the index supplied byIndexAccessorType
. - Added
NormalAccessorType
, which is a type definition for a normal accessor. It can be constructed usinggetNormalAccessorView
. - Added
Uri::getPath
andUri::setPath
. - Added
TileTransform::setTransform
. - Added
GlobeRectangle::splitAtAntiMeridian
. - Added
BoundingRegionBuilder::toGlobeRectangle
. - Added
GlobeRectangle::equals
andGlobeRectangle::equalsEpsilon
. upsampleGltfForRasterOverlays
now accepts two new parameters,hasInvertedVCoordinate
andtextureCoordinateAttributeBaseName
.upsampleGltfForRasterOverlays
now copies images from the parent glTF into the output model.- Added
waitInMainThread
method toFuture
andSharedFuture
. - Added
forEachRootNodeInScene
,addExtensionUsed
,addExtensionRequired
,isExtensionUsed
, andisExtensionRequired
methods toCesiumGltf::Model
. - Added
getNodeTransform
,setNodeTransform
,removeUnusedTextures
,removeUnusedSamplers
,removeUnusedImages
,removeUnusedAccessors
,removeUnusedBufferViews
, andcompactBuffers
methods toGltfUtilities
. - Added
postprocessGltf
method toGltfReader
. Model::merge
now merges theEXT_structural_metadata
andEXT_mesh_features
extensions. It also now returns anErrorList
, used to report warnings and errors about the merge process.
- Fixed a bug in
joinToString
when given a collection containing empty strings. QuantizedMeshLoader
now creates spec-compliant glTFs from a quantized-mesh terrain tile. Previously, the generated glTF had small problems that could confuse some clients.- Fixed a bug in
TileMapServiceRasterOverlay
that caused it to build URLs incorrectly when given a URL with query parameters. - glTFs converted from a legacy batch table to a
EXT_structural_metadata
now:- Add the
EXT_structural_metadata
andEXT_mesh_features
extensions to the glTF'sextensionsUsed
list. - Omit property table properties without any values at all. Previously, such property table properties would have a
values
field referring to an invalid bufferView, which is contrary to the extension's specification. - Rename the
_BATCHID
attribute to_FEATURE_ID_0
inside theKHR_draco_mesh_compression
extension (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_CENTER
property will now haveCESIUM_RTC
added to theirextensionsRequired
andextensionsUsed
lists. - glTFs converted from the 3D Tiles PNTS format now:
- Have their
asset.version
field correctly set to"2.0"
. Previously the version was not set, which is invalid. - Have the
KHR_materials_unlit
extension added to the glTF'sextensionsUsed
list when the point cloud does not have normals. - Have a default
scene
. - Have the
CESIUM_RTC
extension added to the glTF'sextensionsRequired
andextensionsUsed
lists when the PNTS uses theRTC_CENTER
property.
- Have their
- When glTFs are loaded with
applyTextureTransform
set to true, the accessors and bufferViews created for the newly-generated texture coordinates now have theirbyteOffset
set to zero. Previously, they inherited the value from the originalKHR_texture_transform
-dependent objects, which was incorrect. bufferViews
created for indices during Draco decoding no longer have theirbyteStride
property set, as this is unnecessary and disallowed by the specification.bufferViews
created for vertex attributes during Draco decoding now have theirtarget
property correctly set toBufferView::Target::ARRAY_BUFFER
.- After a glTF has been Draco-decoded, the
KHR_draco_mesh_compression
extension is now removed from the primitives, as well as fromextensionsUsed
andextensionsRequired
. - 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::createRasterOverlayTextureCoordinates
no longer fails when the model spans the anti-meridian. However, only the larger part of the model on one side of the anti-meridian will have useful texture coordinates.- Fixed a bug that caused
GltfWriter
to create an invalid GLB if its total size would be greater than or equal to 4 GiB. Because it is not possible to produce a valid GLB of this size, GltfWriter now reports an error instead. CesiumUtility::Uri::resolve
can now properly parse protocol-relative URIs (such as//example.com
).- Fixed a bug where the
GltfReader
was not able to read a model when the BIN chunk of the GLB data was more than 3 bytes larger than the size of the JSON-definedbuffer
.
- Renamed
IntersectionTests::pointInTriangle2D
toIntersectionTests::pointInTriangle
.
- Added
AccessorWriter
constructor that takes anAccessorView
. - Added
PositionAccessorType
, which is a type definition for a position accessor. It can be constructed usinggetPositionAccessorView
. - Added overloads of
IntersectionTests::pointInTriangle
that handle 3D points. One overload includes abarycentricCoordinates
parameter that outputs the barycentric coordinates at that point. - Added overloads of
ImplicitTilingUtilities::computeBoundingVolume
that take aCesium3DTiles::BoundingVolume
. - Added overloads of
ImplicitTilingUtilities::computeBoundingVolume
that take anS2CellBoundingVolume
and anOctreeTileID
. Previously onlyQuadtreeTileID
was supported. - Added
setOrientedBoundingBox
,setBoundingRegion
,setBoundingSphere
, andsetS2CellBoundingVolume
functions toTileBoundingVolumes
.
- Fixed a bug where coordinates returned from
SimplePlanarEllipsoidCurve
were inverted if one of the input points had a negative height. - Fixed a bug where
Tileset::ComputeLoadProgress
could incorrectly report 100% before all tiles finished their main thread loading.
- Removed support for
EXT_feature_metadata
inCesiumGltf
,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
applyKHRTextureTransform
toapplyKhrTextureTransform
. The corresponding header file was similarly renamed toCesiumGltf/applyKhrTextureTransform.h
.
- 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
.FeatureIdTextureView
andPropertyTexturePropertyView
now inherit from this class. - Added
options
parameter toPropertyTextureView::getPropertyView
andPropertyTextureView::forEachProperty
, allowing views to be constructed with property-specific options. - Added
KhrTextureTransform
, a utility class that parses theKHR_texture_transform
glTF extension and reports whether it is valid. UVs may be transformed on the CPU usingapplyTransform
. - Added
contains
method toBoundingSphere
. - Added
GlobeRectangle::MAXIMUM
static field. - Added
ReferenceCountedThreadSafe
type alias. - Added
SimplePlanarEllipsoidCurve
class to help with calculating fly-to paths. - Added
sizeBytes
field toImageCesium
, allowing its size to be tracked for caching purposes even after itspixelData
has been cleared. - Added
scaleToGeocentricSurface
method toEllipsoid
.
- Fixed a bug in
BoundingVolume::estimateGlobeRectangle
where it returned an incorrect rectangle for boxes and spheres that encompass the entire globe. - Fixed an incorrect computation of wrapped texture coordinates in
applySamplerWrapS
andapplySamplerWrapT
.
IndicesForFaceFromAccessor
now properly supportsTRIANGLE_STRIP
andTRIANGLE_FAN
modes. This requires the struct to be initialized with the correct primitive mode.
- Added support for Web Map Tile Service (WMTS) with
WebMapTileServiceRasterOverlay
. - Added conversions from
std::string
to other metadata types inMetadataConversions
. This enables the same conversions asstd::string_view
, while allowing runtime engines to usestd::string
for convenience. - Added
applyTextureTransform
property toTilesetOptions
, which indicates whether to preemptively apply transforms to texture coordinates for textures with theKHR_texture_transform
extension. - Added
loadGltf
method toGltfReader
, making it easier to do a full, asynchronous load of a glTF.
- Fixed a bug in
FeatureIdTextureView
where 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
PropertyTablePropertyView
wherearrayOffsets
were treated as byte offsets, instead of as array indices.
- Add
defaults
method toCesiumIonClient::Connection
.
- Fixed a crash in
SubtreeAvailability::loadSubtree
. - Fixed a bug where the
getApiUrl
method ofCesiumIonClient::Connection
would not return the default API URL if the attempt to accessconfig.json
failed in a more serious way, such as because of an invalid hostname.
- Moved
ErrorList
,CreditSystem
, andCredit
fromCesium3DTilesSelection
toCesiumUtility
. - Moved
GltfUtilities
fromCesium3DTilesSelection
toCesium3DTilesContent
. - Moved
RasterOverlay
,RasterOverlayTileProvider
,RasterOverlayTile
,QuadtreeRasterOverlayTileProvider
,RasterOverlayLoadFailure
,RasterOverlayDetails
, and all of theRasterOverlay
-derived types to a newCesiumRasterOverlays
library and namespace. - Moved
createRasterOverlayTextureCoordinates
method fromGltfUtilities
to a newRasterOverlayUtilities
class in theCesiumRasterOverlays
library. GltfUtilities::parseGltfCopyright
now returns the credits as a vector ofstd::string_view
instances. Previously it took aCreditSystem
and created credits directly.- The
SubtreeAvailability
constructor andloadSubtree
static method now take anImplicitTileSubdivisionScheme
enumeration parameter instead of apowerOf2
parameter. They also now require alevelsInSubtree
parameter, which is needed when switching from constant to bitstream availability. Lastly, the constructor now takes aSubtree
parameter instead of astd::vector<std::vector<std::byte>>
representing the buffers. SubtreeConstantAvailability
,SubtreeBufferViewAvailability
, andAvailabilityView
are now members ofSubtreeAvailability
.- Moved
ImageManipulation
fromCesiumGltfReader
toCesiumGltfContent
. - Added some new parameters to
RasterOverlayUtilities::createRasterOverlayTextureCoordinates
and changed the order of some existing parameters.
- Added new
Cesium3DTilesContent
library and namespace. It has classes for loading, converting, and manipulating 3D Tiles tile content. - Added new
CesiumGltfContent
library and namespace. It has classes for manipulating in-memory glTF files. - Added new
CesiumRasterOverlays
library 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
typedef
s to catch all possible types ofAccessorView
s for an attribute, includingFeatureIdAccessorType
for feature ID attribute accessors,IndexAccessorType
for index accessors, andTexCoordAccessorType
for texture coordinate attribute accessors. - Added
getFeatureIdAccessorView
,getIndexAccessorView
, andgetTexCoordAccessorView
to retrieve theAccessorView
as aFeatureIdAccessorType
,IndexAccessorType
, orTexCoordAccessorType
respectively. - Added
StatusFromAccessor
andCountFromAccessor
visitors to retrieve the accessor status and size respectively. This can be used withFeatureIdAccessorType
,IndexAccessorType
, orTexCoordAccessorType
. - Added
FeatureIdFromAccessor
to retrieve feature IDs from aFeatureIdAccessorType
. - Added
IndicesForFaceFromAccessor
to retrieve the indices of the vertices that make up a face, as supplied byIndexAccessorType
. - Added
TexCoordFromAccessor
to retrieve the texture coordinates from aTexCoordAccessorType
. - Added
TileBoundingVolumes
class toCesium3DTilesContent
, making it easier to create the rich bounding volume types inCesiumGeometry
andCesiumGeospatial
from the simple vector representations inCesium3DTiles
. - Added
transform
method toCesiumGeometry::BoundingSphere
. - Added
toSphere
,fromSphere
, andfromAxisAligned
methods toCesiumGeometry::OrientedBoundingBox
. - Added
TileTransform
class toCesium3DTilesContent
, making it easier to create aglm::dmat4
from thetransform
property of aCesium3DTiles::Tile
. - Added
ImplicitTilingUtilities
class toCesium3DTilesContent
. - Added overloads of
isTileAvailable
,isContentAvailable
, andisSubtreeAvailable
on theSubtreeAvailability
class that take the subtree root tile ID and the tile ID of interest, instead of a relative level and Morton index. - Added
fromSubtree
andcreateEmpty
static methods toSubtreeAvailability
. - Added new
set
methods toSubtreeAvailability
, allowing the availability information to be modified. - Added
SubtreeFileReader
class, used to readCesium3DTiles::Subtree
from a binary or JSON subtree file. - Added
pointInTriangle2D
static method toCesiumGeometry::IntersectionTests
. - Added
rectangleIsWithinPolygons
andrectangleIsOutsidePolygons
static methods toCartographicPolygon
. - Raster overlays now use
IPrepareRasterOverlayRendererResources
, which contains only overlay-related methods, instead ofIPrepareRendererResources
, which contains tileset-related methods as well.IPrepareRendererResources
derives fromIPrepareRasterOverlayRendererResources
so existing code should continue to work without modification. - Added
collapseToSingleBuffer
andmoveBufferContent
methods toGltfUtilities
. - Added
savePng
method toImageManipulation
. RasterOverlayTileProvider::loadTile
now returns a future that resolves when the tile is done loading.- Added
computeDesiredScreenPixels
andcomputeTranslationAndScale
methods toRasterOverlayUtilities
. - Added
Future<T>::thenPassThrough
, used to easily pass additional values through to the next continuation.
- Fixed a bug in
OrientedBoundingBox::contains
where 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.
- Removed
PropertyTablePropertyViewType
andNormalizedPropertyTablePropertyViewType
, as well as their counterparts for property textures and property attributes. When compiled with Clang, the largestd::variant
definitions would significantly stall compilation.
- Updated the Cesium ion OAuth2 URL from
https://cesium.com/ion/oauth
tohttps://ion.cesium.com/oauth
, avoiding a redirect.
- 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.
- Added
getClass
toPropertyTableView
,PropertyTextureView
, andPropertyAttributeView
. This can be used to retrieve the metadataClass
associated with the view. - Added
PropertyViewStatus::EmptyPropertyWithDefault
to indicate when a property contains no data, but has a valid default value. - A glTF
bufferView
with abyteStride
of zero is now treated as if thebyteStride
is not defined at all. Such a glTF technically violates the spec (the minimum value is 4), but the new behavior is sensible enough and consistent with CesiumJS.
- Fixed the handling of omitted metadata properties in
PropertyTableView
,PropertyTextureView
, andPropertyAttributeView
instances. Previously, if a property was notrequired
and omitted, it would be initialized as invalid with theErrorNonexistentProperty
status. Now, it will be treated as valid as long as the property defines a validdefaultProperty
. A special instance ofPropertyTablePropertyView
,PropertyTexturePropertyView
, orPropertyAttributePropertyView
will be constructed to allow the property's default value to be retrieved, either viadefaultValue
orget
.getRaw
may not be called on this special instance.
- Views of the data contained by
EXT_feature_metadata
will 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_metadata
instead ofEXT_feature_metadata
. - In
CesiumGltf
, all generated classes related toEXT_feature_metadata
are now prefixed withExtensionExtFeatureMetadata
. For example,ClassProperty
has becomeExtensionExtFeatureMetadataClassProperty
. This also extends to the glTF reader and writer. - In
CesiumGltf
, all generated classes related toEXT_structural_metadata
have had theirExtensionExtStructuralMetadata
prefix removed. For example,ExtensionExtStructuralMetadataClassProperty
has becomeClassProperty
. This also extends to the glTF reader and writer. - In
CesiumGltf
,ExtensionExtMeshFeaturesFeatureId
andExtensionExtMeshFeaturesFeatureIdTexture
have been renamed toFeatureId
andFeatureIdTexture
respectively. - Replaced
FeatureIDTextureView
withFeatureIdTextureView
, which views aFeatureIdTexture
inEXT_mesh_features
. Feature ID textures fromEXT_feature_metadata
are no longer supported. - Replaced
MetadataFeatureTableView
withPropertyTableView
, which views aPropertyTable
inEXT_structural_metadata
. - Replaced
MetadataPropertyView
withPropertyTablePropertyView
, which is a view of aPropertyTableProperty
inEXT_structural_metadata
. This takes two template parameters: a typenameT
, and abool
indicating whether or not the values are normalized. - Replaced
MetadataPropertyViewStatus
withPropertyTablePropertyViewStatus
.PropertyTablePropertyViewStatus
is a class that inherits fromPropertyViewStatus
, defining additional error codes in the form ofstatic const
values. - Replaced
FeatureTextureView
withPropertyTextureView
, which views aPropertyTexture
inEXT_structural_metadata
. - Replaced
FeatureTexturePropertyView
withPropertyTexturePropertyView
, which is a view of aPropertyTextureProperty
inEXT_structural_metadata
. This takes two template parameters: a typenameT
, and abool
indicating whether or not the values are normalized. - Removed
FeatureTexturePropertyComponentType
,FeatureTexturePropertyChannelOffsets
, andFeatureTexturePropertyValue
.PropertyTextureProperty
retrieves the values with the type indicated by its class property. - Replaced
FeatureTexturePropertyViewStatus
withPropertyTexturePropertyViewStatus
.PropertyTexturePropertyViewStatus
is a class that inherits fromPropertyViewStatus
, defining additional error codes in the form ofstatic const
values. - Renamed
FeatureIDTextureViewStatus
toFeatureIdTextureViewStatus
for consistency. - Renamed
MetadataArrayView
toPropertyArrayView
. - Renamed
FeatureTextureViewStatus
toPropertyTextureViewStatus
. - Refactored
PropertyType
to reflect the values oftype
in aClassProperty
fromEXT_structural_metadata
.
- Added
PropertyView
, which acts as a base class for all metadata property views. This takes two template parameters: a typeT
, and abool
indicating whether or not the values are normalized. - Added
PropertyViewStatus
, which defines publicstatic const
values for various property errors. - Added
PropertyTableViewStatus
to indicate whether aPropertyTableView
is valid. - Added
PropertyComponentType
to reflect the values ofcomponentType
in aClassProperty
fromEXT_structural_metadata
. - Added
PropertyAttributeView
, which views aPropertyAttribute
inEXT_structural_metadata
. - Added
PropertyAttributePropertyView
, which views aPropertyAttributeProperty
inEXT_structural_metadata
. - Added
PropertyAttributePropertyViewStatus
, which reflects the status of aPropertyAttributePropertyView
.
- Added support for Cesium ion
"externalType"
assets.
- Fixed corner cases where
Tileset::ComputeLoadProgress
can incorrectly report done (100%) before all tiles are actually loaded for the current view.
- Added
CESIUM_GLM_STRICT_ENABLED
option 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_LENGTH
options in the GLM library.
- Added a missing include to
FeatureTexturePropertyView.h
. - The CMake scripts no longer attempt to add the
Catch2
subdirectory when the tests are disabled.
- Fixed a bug that could cause a crash when loading tiles with a raster overlay.
- Renamed
ExtensionReaderContext
toJsonReaderOptions
, and thegetExtensions
method on various JSON reader classes togetOptions
. IExtensionJsonHandler
no 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
, andreadTileset
methods (respectively) have been renamed toreadFromJson
and return a templatedReadJsonResult
instead of a bespoke result class. TileExternalContent
is now heap allocated and stored inTileContent
with astd::unique_ptr
.- The root
Tile
of aCesium3DTilesSelection::Tileset
now represents the tileset.json itself, and theroot
tile specified in the tileset.json is its only child. This makes the shape of the tile tree consistent between a standard top-level tileset and an external tileset embedded elsewhere in the tree. In both cases, the "tile" that represents the tileset.json itself has content of typeTileExternalContent
.
- Added new constructors to
LocalHorizontalCoordinateSystem
taking ECEF<->Local transformation matrices directly. - Unknown properties in objects read with a
JsonReader
are now stored in theunknownProperties
property onExtensibleObject
by default. To ignore them, as was done in previous versions, callsetCaptureUnknownProperties
onJsonReaderOptions
. - Added
ValueType
type alias toArrayJsonHandler
, for consistency with other JSON handlers. - Added an overload of
JsonReader::readJson
that takes arapidjson::Value
instead of a byte buffer. This allows a subtree of arapidjson::Document
to be easily and efficiently converted into statically-typed classes viaIJsonHandler
. - Added
*Reader
classes toCesiumGltfReader
andCesium3DTilesReader
to allow each of the classes to be individually read from JSON. - Added
getExternalContent
method to theTileContent
class. TileExternalContent
now holds the metadata (schema
,schemaUri
,metadata
, andgroups
) stored in the tileset.json.- Added
loadMetadata
andgetMetadata
methods toCesium3DTilesSelection::Tileset
. They provide access toTilesetMetadata
instance representing the metadata associated with a tileset.json. - Added
MetadataQuery
class to make it easier to find properties with specific semantics inTilesetMetadata
.
- 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.
- 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_compression
extension, which allows decompressing mesh data using the meshoptimizer library. Also added support for theKHR_mesh_quantization
andKHR_texture_transform
extensions, which are often used together with theEXT_meshopt_compression
extension to optimize the size and performance of glTF files.
- 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::readImage
would always populatemipPositions
when reading KTX2 images, even when the KTX2 file indicated that it had no mip levels and that they should be created, if necessary, from the base image. As a result,generateMipMaps
wouldn't generate any mipmaps for the image.
- Included generated glTF and 3D Tiles classes in the generated referenced documentation.
- Updated the 3D Tiles class generator to use the
main
branch instead of thedraft-1.1
branch.
- Added
computeTransformationToAnotherLocal
method toLocalHorizontalCoordinateSystem
. - Added support for the
KHR_materials_variants
extension 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-Encoding
header.
- 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_BYTE
indices.
WebMapServiceRasterOverlay
now 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.
- Fixed various
libjpeg-turbo
build errors, including ones that occurred when building for iOS.
- Removed
tilesLoadingLowPriority
,tilesLoadingMediumPriority
, andtilesLoadingHighPriority
fromViewUpdateResult
. UseworkerThreadTileLoadQueueLength
andmainThreadTileLoadQueueLength
instead.
- Added
getOrientedBoundingBoxFromBoundingVolume
to theCesium3DTilesSelection
namespace. - Added
transform
andtoAxisAligned
methods toOrientedBoundingBox
. - Switched to
libjpeg-turbo
instead ofstb
for faster jpeg decoding. - Added
getNumberOfTilesLoaded
method toTileset
. - Changed how
TilesetOptions::forbidHoles
works so that it loads much more quickly, while still guaranteeing there are no holes in the tileset. - Added
frameNumber
property toViewUpdateResult
. - Added getters for the
stride
anddata
fields ofAccessorView
. - Added
startNewFrame
method toITileExcluder
. - Added
CreditSystem.setShowOnScreen
andTileset.setShowCreditsOnScreen
to allow on-screen credit rendering to be toggled at runtime.
- Fixed a bug that caused the
center
field ofAxisAlignedBox
to 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
source
property, not the glTF's mainTexture
definition.
- Fixed a crash that could occur when a batch table property had fewer values than the model had features.
- Renamed
CesiumGeometry::AxisTransforms
to simplyTransforms
. - Renamed
CesiumGeospatial::Transforms
toGlobeTransforms
.
- 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
pnts
content. Point clouds are converted toglTF
s with a singlePOINTS
primitive, while batch tables are converted toEXT_feature_metadata
. - Added
createTranslationRotationScaleMatrix
andcomputeTranslationRotationScaleFromMatrix
methods toCesiumGeometry::Transforms
. - Added
CesiumUtility::AttributeCompression
for encoding and decoding vertex attributes in different formats.
- 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.
- 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::sprintf
withstd::snprintf
, fixing a warning-as-error in newer versions of Xcode. - Upgraded tinyxml2 from commit 1aeb57d26bc303d5cfa1a9ff2a331df7ba278656 to commit e05956094c27117f989d22f25b75633123d72a83.
- Added the ability to specify the endpoint URL of the Cesium ion API when constructing an
IonRasterOverlay
.
- Removed the logged warning about the use of the
gltfUpAxis
property in a 3D Tiles tileset.json. While not technically spec-compliant, this property is quite common and we are not going to remove support for it anytime soon.
- Fixed a bug that could cause an assertion failure - and on rare occasions a more serious problem - when creating a tile provider for a
TileMapServiceRasterOverlay
or aWebMapServiceRasterOverlay
.
- On
IPrepareRendererResources
, theimage
parameter passed toprepareRasterInLoadThread
and therasterTile
parameter passed toprepareRasterInMainThread
are no longer const. These methods are now allowed to modify the parameters during load. IPrepareRendererResources::prepareInLoadThread
now takes aTileLoadResult
and returns aFuture<TileLoadResultAndRenderResources>
, allowing it to work asynchronously rather than just blocking a worker thread until it is finished.RasterOverlay::createTileProvider
now takes the owner pointer as anIntrusivePointer
instead of a raw pointer, and returns a future that resolves to aRasterOverlay::CreateTileProviderResult
.
- Added
mainThreadLoadingTimeLimit
andtileCacheUnloadTimeLimit
properties toTilesetOptions
, allowing a limit to be placed on how much time is spent loading and unloading tiles per frame. - Added
GltfReader::generateMipMaps
method. - Added the
getImage
method toRasterOverlayTile
. - Added
LocalHorizontalCoordinateSystem
, which is used to create convenient right- or left-handeded coordinate systems with an origin at a point on the globe.
- 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.
TileRenderContent::lodTransitionPercentage
now 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.
- In
CesiumGltfWriter
,accessor.byteOffset
andbufferView.byteOffset
are no longer written if the value is 0. This fixes validation errors for accessors that don't have buffer views, e.g. attributes that are Draco compressed. - 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.
RasterOverlayCollection
no longer accepts aTileset
in its constructor. Instead, it now accepts aTile::LoadedLinkList
and aTilesetExternals
.- Removed
TileContext
. It has been replaced by theTilesetContentLoader
interface. - Removed
TileContentFactory
. Instead, conversions of various types to glTF can be registered withGltfConverters
. - Removed
TileContentLoadInput
. It has been replaced byTileLoadInput
andTilesetContentLoader
. - Removed
TileContentLoadResult
. It has been replaced byTileContent
. - Removed
TileContentLoader
. It has been replaced byTilesetContentLoader
andGltfConverters
. - Removed
ImplicitTraversal
. It has been replaced byTilesetContentLoader
andGltfConverters
. - Removed many methods from the
Cesium3DTilesSelection::Tileset
class: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::Tile
class: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.
- 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
TilesetOptions
supporting 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_webp
extension. - Added support for
KHR_texture_transform
toCesiumGltf
,CesiumGltfReader
, andCesiumGltfWriter
Tileset
can be constructed with aTilesetContentLoader
and a rootTile
for loading and rendering different 3D Tile-like formats or creating a procedural tileset.
- Fixed a bug where the Raster Overlay passed to the
loadErrorCallback
would not be the one that the user created, but instead an aggregated overlay that was created internally.
- Fixed a bug in
SqliteCache
where the last access time of resources was not updated correctly, sometimes causing more recently used resources to be evicted from the cache before less recently used ones.
- Removed support for 3D Tiles Next extensions in
TilesetWriter
andTilesetReader
that have been promoted to core in 3D Tiles 1.1 - Removed the
getSupportsRasterOverlays
fromTileset
because the property is no longer relevant now that all tilesets support raster overlays.
- Added support for 3D Tiles 1.1 in
TilesetWriter
andTilesetReader
. - Added a
TileOcclusionRendererProxyPool
toTilesetExternals
. If a renderer implements and provides this interface, the tile occlusion information is used to avoid refining parent tiles that are completely occluded, reducing the number of tiles loaded. Tileset
can now estimate the percentage of the tiles for the current view that have been loaded by calling thecomputeLoadProgress
method.- 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.
- Fixed crash when parsing an empty copyright string in the glTF model.
- Added option to the
RasterizedPolygonsOverlay
to invert the selection, so everything outside the polygons gets rasterized instead of inside. - The
RasterizedPolygonsTileExcluder
excludes 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.
- For consistency with CesiumJS and compatibility with third-party terrain tilers widely used in the community, the
bounds
property of thelayer.json
file of a quantized-mesh terrain tileset is now ignored, and the terrain is assumed to cover the entire globe.
- 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-httplib
to v0.10.3 (changes)draco
to v1.5.2 (changes)earcut
to v2.2.3 (changes)PicoSHA2
to commit1677374f23352716fc52183255a40c1b8e1d53eb
(changes)rapidjson
to commitfcb23c2dbf561ec0798529be4f66394d3e4996d8
(changes)spdlog
to v1.10.0 (changes)stb
to commitaf1a5bc352164740c1cc1354942b1c6b72eacb8a
(changes)uriparser
to v0.9.6 (changes)
- Fixed a bug that could cause tiles in external tilesets to fail to load.
- Improved the load performance when
TilesetOptions::forbidHoles
is 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_hierarchy
extension.
- Fixed a bug that could cause the same tiles to be continually loaded and unloaded when
TilesetOptions::forbidHoles
was 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::forbidHoles
enabled, 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::prepareInMainThread
was called on aTile
before thatTile
was 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.
- Fixed a crash caused by using an aggregated overlay of
IonRasterOverlay
after 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.
- Added a new parameter,
rendererOptions
, toIPrepareRendererResources::prepareRasterInLoadThread
. - Changed the type of Cesium ion asset IDs from
uint32_t
toint64_t
. - Various changes in the
Cesium3DTiles
,Cesium3DTilesReader
, andCesium3DTilesWriter
namespaces to match the evolving 3D Tiles Next specifications. - Removed
getTextureCoordinateIndex
fromFeatureIDTextureView
andFeatureTexturePropertyView
. UsegetTextureCoordinateAttributeId
instead.
- Added
WebMapServiceRasterOverlay
to pull raster overlays from a WMS server. - Added support for the following glTF extensions to
CesiumGltf
,CesiumGltfReader
, andCesiumGltfWriter
:EXT_instance_features
EXT_structural_metadata
MAXAR_mesh_variants
- Added an in-memory cache for Cesium ion asset endpoint responses in order to avoid repeated requests.
- Added
ScopeGuard
class to automatically a execute function when exiting a scope. - The glTF
copyright
property, if present, is now included in the credits thatTileset
adds to theCreditSystem
. If thecopyright
has multiple parts separate by semicolons, these are treated as separate credits. - Credits reported by
CreditSystem::getCreditsToShowThisFrame
are now sorted based on the number of occurrences, with the most common credits first. Tileset
andRasterOverlay
credits can now be shown on the screen, rather than in a separate credit popup.- Added
FeatureTexturePropertyView::getSwizzle
method. - Added
IsMetadataArray
template to check if a type is aMetadataArrayView
. - Added a
rendererOptions
property toRasterOverlayOptions
to pass arbitrary data toprepareRasterInLoadThread
. - Added
Uri::escape
.
- Fixed an issue that could lead to compilation failures when passing an lvalue reference to
Promise::resolve()
. - Fixed upsampling for
EXT_feature_metadata
feature 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.
- Renamed constants in
CesiumUtility::Math
to use PascalCase instead of SCREAMING_SNAKE_CASE.
- Added support for the
CESIUM_RTC
andKHR_texture_basisu
glTF 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.
TilesetOptions
andRasterOverlayOptions
each have a new option to report which compressed textured formats are supported on the client platform. Ideal formats amongst the available ones are picked for each KTX2 texture that is later encountered.- The
ImageCesium
class nows convey which GPU pixel compression format (if any) is used. This informs what to expect in the image's pixel buffer. - The
ImageCesium
class can now contain pre-computed mipmaps, if they exist. In that case, all the mips will be in the pixel buffer and the delineation between each mip will be described 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.
- 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.
- Renamed
IAssetAccessor::requestAsset
toget
. - Renamed
IAssetAccessor::post
torequest
and added a new parameter in the second position to specify the HTTP verb to use. Token
inCesiumIonClient
has been updated to match Cesium ion's v2 REST API endpoint, so several fields have been renamed. Thetokens
method also now returns future that resolves to aTokenList
instead of a plain vector ofToken
instances.- Renamed
GltfReader::readModel
,ModelReaderResult
, andReadModelOptions
toGltfReader::readGltf
,GltfReaderResult
, andGltfReaderOptions
respectively. - Removed
writeModelAsEmbeddedBytes
,writeModelAndExternalFiles
,WriteModelResult
,WriteModelOptions
, andWriteGLTFCallback
. UseGltfWriter::writeGltf
,GltfWriter::writeGlb
,GltfWriterResult
, andGltfWriterOptions
instead.
- Added
TilesetWriterOptions
for serializing tileset JSON. - Added support for the following extensions in
GltfWriter
andGltfReader
: - Added support for the following extensions in
TilesetWriter
andTilesetReader
: - Added
SubtreeWriter
andSubtreeReader
for serializing and deserializing the subtree format in 3DTILES_implicit_tiling. - Added
SchemaWriter
andSchemaReader
for serializing and deserializing schemas in EXT_mesh_features and 3DTILES_metadata. - Added
hasExtension
toExtensibleObject
. - Added
CESIUM_TESTS_ENABLED
option 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
Connection
inCesiumIonClient
:- The
tokens
method now uses the v2 service endpoint and allows a number of options to be specified. - Added a
token
method to allow details of a single token to be retrieved. - Added
nextPage
andpreviousPage
methods to allow paging through tokens. - Added
modifyToken
method. - Added static
getIdFromToken
method to obtain a token ID from a given token value.
- The
- Added
loadErrorCallback
toTilesetOptions
andRasterOverlayOptions
. This callback is invoked when theTileset
orRasterOverlay
encounter 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 a bug where
notifyTileDoneLoading
was not called when encountering Ion responses that can't be parsed. - Fixed a bug that prevented a continuation attached to a
SharedFuture
from returning aFuture
itself. - Fixed incorrect child subtree index calculation in implicit tiles.
- Fixed
computeDistanceSquaredToPosition
inBoundingSphere
.
- The
CesiumGltfReader
project now uses theCesiumGltfReader
namespace instead of theCesiumGltf
namespace. - The
CesiumGltfWriter
project now uses theCesiumGltfWriter
namespace instead of theCesiumGltf
namespace. - The
Cesium3DTilesReader
project now uses theCesium3DTilesReader
namespace instead of theCesium3DTiles
namespace.
- Added
Cesium3DTilesWriter
library.
- Fixed a bug in
QuadtreeRasterOverlayTileProvider
that caused incorrect level-of-detail selection for overlays that use a global (or otherwise large) tiling scheme but have non-global (or otherwise smaller) coverage.
QuadtreeRasterOverlayTileProvider::computeLevelFromGeometricError
has been removed.computeLevelFromTargetScreenPixels
may be useful as a replacement.- The constructor of
RasterOverlayTileProvider
now requires a coverage rectangle. RasterOverlayTileProvider::getTile
now takes atargetScreenPixels
instead of atargetGeometricError
.- The constructor of
RasterMappedTo3DTile
now requires a texture coordinate index. - The constructor of
RasterOverlayTile
now takes atargetScreenPixels
instead of atargetGeometricError
. And the correspondinggetTargetGeometricError
has been removed. - Removed
TileContentLoadResult::rasterOverlayProjections
. This field is now found in theoverlayDetails
. - Removed
obtainGlobeRectangle
fromTileUtilities.h
. UseestimateGlobeRectangle
inBoundingVolume.h
instead. - cesium-native now uses the following options with the
glm
library:GLM_FORCE_XYZW_ONLY
GLM_FORCE_EXPLICIT_CTOR
GLM_FORCE_SIZE_T_LENGTH
- 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
RasterOverlay
can now be configured with amaximumScreenSpaceError
independent of the screen-space error used for the geometry. RasterOverlay::loadTileProvider
now returns aSharedFuture
, making it easy to attach a continuation to run when the load completes.- Added
GltfContent::applyRtcCenter
andapplyGltfUpAxisTransform
. - Clipping polygon edges now remain sharp even when zooming in past the available geometry detail.
- Added
DebugColorizeTilesRasterOverlay
. - Added
BoundingRegionBuilder
toCesiumGeospatial
. - Added
GlobeRectangle::EMPTY
static field andGlobeRectangle::isEmpty
method. - Added the ability to set the coordinates of a
GlobeRectangle
after construction.
- 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::computeCenter
andGlobeRectangle::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.
- Changed the following properties in CesiumGltf:
BufferView::target
now defaults tostd::nullopt
instead ofTarget::ARRAY_BUFFER
.ClassProperty::type
now defaults toType::INT8
instead of empty string.ClassProperty::componentType
is now an optional string instead of aJsonValue
.FeatureTexture::classProperty
is no longer optional, consistent with changes to the extension spec.Image::mimeType
now defaults to empty string instead ofMimeType::image_jpeg
.Sampler::magFilter
andSampler::minFilter
now default tostd::nullopt
instead ofMagFilter::NEAREST
.
- The version of
ExtensibleObject
in theCesiumGltf
library and namespace has been removed. Use the one in theCesiumUtility
library and namespace instead. - Renamed the following glTF extension classes:
KHR_draco_mesh_compression
->ExtensionKhrDracoMeshCompression
.MeshPrimitiveEXT_feature_metadata
->ExtensionMeshPrimitiveExtFeatureMetadata
ModelEXT_feature_metadata
->ExtensionModelExtFeatureMetadata
CesiumGltf::ReaderContext
has been removed. It has been replaced with eitherCesiumJsonReader::ExtensionReaderContext
orGltfReader
.
- Added new
Cesium3DTiles
andCesium3DTilesReader
libraries. They are useful for reading and working with 3D Tiles tilesets.
- 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-classes
deals with reserved C++ keywords. Property names that are C++ keywords should be appended with "Property" as was already done, but when parsing JSONs the original property name string should be used.
- 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.
- Fixed a bug that caused the
RTC_CENTER
semantic in a B3DM feature table to be ignored if any of the values happened to be integers rather than floating-point numbers. This caused these tiles to render in the wrong location.
- Fixed a bug where the "forbidHoles" option was not working with raster overlays and external tilesets.
- Fixed a bug introduced in v0.7.0 where credits from a
QuadtreeRasterOverlayTileProvider
were not collected and reported. - Fixed a bug where disabling frustum culling caused external tilesets to not load.
- Renamed the
Cesium3DTiles
namespace and library toCesium3DTilesSelection
. - Deleted
Cesium3DTilesSelection::Gltf
and moved functionality intoCesiumGltf::Model
. - Renamed
Rectangle::intersect
andGlobeRectangle::intersect
tocomputeIntersection
. RasterOverlay
and derived classes now require aname
parameter to their constructors.- Changed the type of texture coordinate IDs used in the raster overlay system from
uint32_t
toint32_t
. RasterOverlayTileProvider
is no longer quadtree-oriented. Instead, it requires derived classes to provide an image for a particular requested rectangle and geometric error. Classes that previously derived fromRasterOverlayTileProvider
should now derive fromQuadtreeRasterOverlayTileProvider
and implementloadQuadtreeTileImage
instead ofloadTileImage
.- Removed
TilesetOptions::enableWaterMask
, which didn't have any effect anyway.TilesetContentOptions::enableWaterMask
still exists and works.
- Added
Future<T>::isReady
. - Added
Future<T>::share
, which returns aSharedFuture<T>
and allows multiple continuations to be attached. - Added an option in
TilesetOptions::ContentOptions
to generate smooth normals when the original glTFs were missing normals. - Added
ImageManipulation
class toCesiumGltfReader
. - Added
Math::roundUp
andMath::roundDown
. - Added
Rectangle::computeUnion
.
- Fixed a bug that caused CesiumGltfWriter to write a material's normal texture info into a property named
normalTextureInfo
rather thannormalTexture
. - Fixed a bug in
TileMapServiceRasterOverlay
that caused it to show only the lowest resolution tiles if missing atilemapresource.xml
file.
Future<T>::wait
now returns the resolved value and throws if the Future rejected, rather than returning astd::variant
and slicing the exception tostd::exception
.Tileset::updateView
andTileset::updateViewOffline
now takestd::vector<ViewState>
instead of a singleViewState
.
- Added support for the
EXT_feature_metadata
glTF extension. - Added automatic conversion of the B3DM batch table to the
EXT_feature_metadata
extension. - Added
CESIUM_COVERAGE_ENABLED
option to the build system. - Added
AsyncSystem::dispatchOneMainThreadTask
to dispatch a single task, rather than all the tasks that are waiting. - Added
AsyncSystem::createPromise
to create a Promise directly, rather than via a callback as inAsyncSystem::createFuture
. - Added
AsyncSystem::catchImmediately
to catch a Future rejection immediately in any thread. - Added
AsyncSystem::all
to create a Future that resolves when a list of Futures resolve. - Added support for multiple frustums in the
Tileset
selection algorithm.
- Fixed a bug that prevented
.then
functions from being used on aFuture<void>
when CESIUM_TRACING_ENABLED was ON.
TilesetExternals
now has anAsyncSystem
instead of a shared pointer to anITaskProcessor
.
- Added a performance tracing framework via
CESIUM_TRACE_*
macros. - Added
Future<T>::thenImmediately
. - Added
AsyncSystem::createThreadPool
andFuture<T>::thenInThreadPool
. Future<T>::thenInWorkerThread
andFuture<T>::thenInMainThread
now arrange for their continuations to be executed immediately when the Future is resolved, if the Future is resolved in the correct thread.- Moved all request cache database access to a dedicated thread, in order to free up worker threads for parallelizable work.
- Added
Cesium3DTiles::TileIdUtilities
with acreateTileIdString
function to create logging/debugging strings forTileID
objects. - 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*
.
- Matched draco's decoded indices to gltf primitive if indices attribute does not match with the decompressed indices.
createAccessorView
now creates an (invalid)AccessorView
with 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_AVAILABLE
andHTTPLIB_USE_OPENSSL_IF_AVAILABLE
because these libraries are not required for our use for cpp-httplib and they cause problems on some systems.
- 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
.
- Converted
magic_enum
/CodeCoverage.cmake
dependencies to external submodules. - Replaced
CesiumGltf::WriteFlags
bitmask withCesiumGltf::WriteModelOptions
struct.CesiumGltf::writeModelAsEmbeddedBytes
andCesiumGltf::writeModelAndExternalfiles
now use this struct for configuration. - Removed all exceptions in
WriterException.h
, warnings / errors are now reported inWriteModelResult
, which is returned fromCesiumGltf::writeModelAsEmbeddedBytes
andCesiumGltf::writeModelAndExternalFiles
instead.
- Added support for loading the water mask from quantized-mesh terrain tiles.
- Let a tile be renderable if all its raster overlays are ready, even if some are still loading.
- Moved
JsonValue
from theCesiumGltf
library to theCesiumUtility
library and changes some of its methods. - Renamed
CesiumGltf::Reader
toCesiumGltf::GltfReader
. - Made the
readModel
andreadImage
methods onGltfReader
instance methods instead of static methods.
- Added
CesiumGltfWriter
library. - Added
CesiumJsonReader
library. - 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
Axis
enum andAxisTransforms
class for coordinate system transforms - Added support for the legacy
gltfUpVector
string property in theasset
part of tilesets. The up vector is read and passed as anAxis
in 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 aJsonValue
even though a statically-typed class is available for the extension.
- Gave glTFs created from quantized-mesh terrain tiles a more sensible material with a
metallicFactor
of 0.0 and aroughnessFactor
of 1.0. Previously the default glTF material was used, which has ametallicFactor
of 1.0, leading to an undesirable appearance. - Reported zero-length images as non-errors as
BingMapsRasterOverlay
purposely 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.
- Initial release.