Skip to content
Merged
Show file tree
Hide file tree
Changes from 122 commits
Commits
Show all changes
163 commits
Select commit Hold shift + click to select a range
243cae3
Move last selection state out of Tile in the simplest way possible.
kring Feb 12, 2025
4bed3c8
Merge remote-tracking branch 'origin/main' into multiple-views
kring Feb 16, 2025
6e0a355
Call startNextFrame on all ViewGroups.
kring Feb 17, 2025
3f7fed8
Don't check frame number.
kring Feb 18, 2025
9bdf470
Merge remote-tracking branch 'origin/main' into multiple-views
kring Feb 25, 2025
e60c349
Merge remote-tracking branch 'origin/unload-external-tilesets-2' into…
kring Feb 26, 2025
caf4668
New Tile unload approach.
kring Feb 26, 2025
0613cfa
Merge remote-tracking branch 'origin/main' into multiple-views
kring Feb 27, 2025
1326242
New loaded tile enumeration.
kring Feb 27, 2025
ff24bad
TilesetContentManger owns LoadedTileEnumerator.
kring Feb 28, 2025
83ecea4
Less fiddly updating of LoadedTileEnumerator's root tile.
kring Feb 28, 2025
b3c0999
More natural tile reference counting.
kring Feb 28, 2025
c7fc9c3
Remove unused frame number from TileSelectionState.
kring Feb 28, 2025
8a626df
Remove unused frame number parameters.
kring Feb 28, 2025
0092b7b
Merge remote-tracking branch 'origin/main' into multiple-views
kring Mar 4, 2025
a81e7f3
Move load queues into TilesetViewGroup.
kring Mar 6, 2025
076fcbc
Add ITileLoadRequester, register with TilesetContentManager.
kring Mar 6, 2025
865d8af
Register in remaining TilesetViewGroup constructor.
kring Mar 6, 2025
49783e0
Weighted round robin worker thread tile loading.
kring Mar 7, 2025
db5602c
Settable weights.
kring Mar 7, 2025
a2dc5fd
Weighted round robin for main thread loading, too.
kring Mar 7, 2025
c5b5841
Fix height queries.
kring Mar 7, 2025
be14e13
Fix clang warning.
kring Mar 10, 2025
7bcb43e
Merge remote-tracking branch 'origin/main' into multiple-views
kring Mar 10, 2025
a5e5bee
Doc, make needs*Loading methods accessible.
kring Mar 10, 2025
88f23da
Rename ITileLoadRequester.h to TileLoadRequester.h.
kring Mar 10, 2025
f31eddd
Rename ITileLoadRequester to TileLoadRequester.
kring Mar 10, 2025
5c3fe54
Less magic for registration of TileLoadRequesters.
kring Mar 10, 2025
cb5b39d
Remove createViewGroup method.
kring Mar 10, 2025
a64daea
Process height queries in loadTiles instead of updateView.
kring Mar 10, 2025
420ee78
Fix clang error, hopefully.
kring Mar 10, 2025
9b1efc6
Clean up LoadedTileEnumerator.
kring Mar 10, 2025
74d17e5
Formatting.
kring Mar 10, 2025
9f170ee
Remove invalid use of `static`.
kring Mar 10, 2025
556d803
Documentation.
kring Mar 10, 2025
06914b4
More missing doc.
kring Mar 10, 2025
1c15340
clang-tidy warnings.
kring Mar 10, 2025
e4e563a
More clang-tidy.
kring Mar 11, 2025
19ff299
Include <functional> for std::hash.
kring Mar 11, 2025
58aaffa
Rename local variable.
kring Mar 11, 2025
d7f36bd
Fix DebugTileStateDatabase.
kring Mar 11, 2025
35a924f
DebugTileStateDatabse logs previous selection state.
kring Mar 11, 2025
600dc3e
Tile cleanup.
kring Mar 11, 2025
27c384b
Doc.
kring Mar 11, 2025
daed0a1
Make Tileset not a friend of TilesetViewGroup.
kring Mar 11, 2025
8df7f2a
Improve names, add doc.
kring Mar 11, 2025
c5d9fe9
Clang-tidy.
kring Mar 11, 2025
87b9ac2
More clang-tidy.
kring Mar 11, 2025
54a63e4
Move ViewUpdateResult to TilesetViewGroup.
kring Mar 11, 2025
e782ba4
Fix incorrect comment.
kring Mar 11, 2025
a213d8a
Re-renable TilesetContentManager tests.
kring Mar 11, 2025
8010ede
Reactivate TilesetSelectionAlgorithm tests.
kring Mar 11, 2025
0ce7e6d
WIP optimized selection state tracking.
kring Mar 12, 2025
2e05881
Improve TreeTraversalState, write tests.
kring Mar 14, 2025
34d49b5
Much cleaner TreeTraversalState, more tests.
kring Mar 15, 2025
eec5a52
Remove commented-out code, add doc.
kring Mar 15, 2025
a286796
Fix DebugTileStateDatabase, add doc.
kring Mar 15, 2025
1f1055f
Reactivate LOD transitions.
kring Mar 15, 2025
e837652
Remove commented-out code.
kring Mar 15, 2025
85e2066
Avoid nested traversals.
kring Mar 15, 2025
3fc4df5
Fix release build warning.
kring Mar 15, 2025
bd4d058
Formatting.
kring Mar 16, 2025
4ae0596
Fix clang-tidy warnings.
kring Mar 16, 2025
6894914
Fix doc errors.
kring Mar 16, 2025
e4f25aa
Fix warnings.
kring Mar 16, 2025
1c2914e
Fix clang warnings.
kring Mar 16, 2025
a845666
Fix comment characters.
kring Mar 16, 2025
fd2359c
Re-enable selection tests.
kring Mar 16, 2025
eb77e8d
Fix ref count bug with LOD transitions enabled.
kring Mar 16, 2025
2d82e6e
Merge pull request #1129 from CesiumGS/multiple-views-faster
kring Mar 16, 2025
1522a65
Merge remote-tracking branch 'origin/main' into multiple-views
kring Mar 27, 2025
2445c49
Add support for querying TilesetViewGroup load progress.
kring Mar 27, 2025
4ca1a11
Fix clang warning.
kring Mar 27, 2025
4bbb7e4
clang-tidy warnings.
kring Mar 27, 2025
e9eb9e9
New retained mode CreditSystem.
kring Mar 28, 2025
024d8c8
Qualify with this.
kring Mar 28, 2025
260e803
Merge remote-tracking branch 'origin/main' into multiple-views
kring Apr 2, 2025
4141a83
Merge remote-tracking branch 'origin/multiple-views' into multiple-vi…
kring Apr 2, 2025
3499dee
Start making TilesetViewGroups update credits.
kring Apr 2, 2025
e623a7d
Better TilesetViewGroup credit tracking.
kring Apr 3, 2025
9a2b6c6
Re-add the rest of the credits.
kring Apr 3, 2025
f2975cf
Formatting.
kring Apr 3, 2025
b3d9044
Fix warning.
kring Apr 3, 2025
cea2af7
Fix doc problems.
kring Apr 3, 2025
9468252
Merge remote-tracking branch 'origin/main' into multiple-views
kring Apr 3, 2025
5b4c3a0
Merge remote-tracking branch 'origin/multiple-views' into multiple-vi…
kring Apr 3, 2025
b4056a9
Merge remote-tracking branch 'origin/downgrade-cmake-more' into multi…
kring Apr 3, 2025
bca8184
Merge remote-tracking branch 'origin/multiple-views' into multiple-vi…
kring Apr 3, 2025
2e7bf0a
Add missing header.
kring Apr 3, 2025
7f2ef34
Merge remote-tracking branch 'origin/multiple-views' into multiple-vi…
kring Apr 3, 2025
d64469f
clang-tidy.
kring Apr 3, 2025
abd17be
More clang-tidy.
kring Apr 3, 2025
05e3ae1
Merge pull request #1152 from CesiumGS/multiple-views-credits
kring Apr 3, 2025
f45fb3f
Merge remote-tracking branch 'origin/main' into multiple-views
kring Apr 4, 2025
398ae77
Doc tweaks.
kring Apr 4, 2025
7e5c7df
CreditReferencer copy/move operations.
kring Apr 4, 2025
cf6cf7f
Fix clang-tidy warning.
kring Apr 4, 2025
bb53be1
Add CreditReferencer tests.
kring Apr 4, 2025
499ef05
Add TileLoadRequester tests.
kring Apr 7, 2025
91090b8
Test cleanup.
kring Apr 7, 2025
2d1a624
CreditSystem cleanup.
kring Apr 7, 2025
9c0dc55
Fix clang warning.
kring Apr 7, 2025
994858e
Update CHANGES.md.
kring Apr 7, 2025
65587cd
Doc updates.
kring Apr 7, 2025
e7b0ded
Start progress at 0 instead of 100.
kring Apr 7, 2025
bec5ae2
Remove frame number from Tileset.
kring Apr 8, 2025
c09bd48
Add basic TilesetViewGroup test.
kring Apr 8, 2025
1f4d3b1
Small cleanup, mostly doc.
kring Apr 8, 2025
2720437
Simplify tile enumeration.
kring Apr 8, 2025
e4e8d62
Tile initialization cleanup.
kring Apr 8, 2025
f778da7
Tileset cleanup.
kring Apr 8, 2025
b1d8456
Better TileLoadTask ordering.
kring Apr 8, 2025
eb6a647
More efficient swap, doc tweaks.
kring Apr 8, 2025
d0a70e0
Missing "this->"
kring Apr 8, 2025
a25233b
Changes from review.
kring Apr 10, 2025
abb8d33
Don't enumerate root tile if it / descendants are not loaded.
kring Apr 11, 2025
97dcc14
Doc improvements.
kring Apr 11, 2025
1c184cc
Use member function pointers instead of templates / lambdas.
kring Apr 11, 2025
3dd746b
Rename _tilesAlreadyLoading -> _tilesAlreadyLoadingOrUnloading.
kring Apr 11, 2025
3da6ea1
Improvements from review.
kring Apr 11, 2025
a6e9fde
Only store one reference count on Tile.
kring Apr 14, 2025
c31e1da
Fix broken link in doc.
kring Apr 14, 2025
6e4b13f
Fix clang-tidy warnings.
kring Apr 14, 2025
ae2b985
Update msys links.
kring Apr 15, 2025
34dbe5e
Merge remote-tracking branch 'origin/main' into multiple-views
kring Apr 15, 2025
d82c165
Merge remote-tracking branch 'origin/multiple-views' into multiple-vi…
kring Apr 15, 2025
818e4fc
More reference counting doc.
kring Apr 15, 2025
41889dc
Tile::Pointer and other cleanup.
kring Apr 15, 2025
8413448
Hold IntrusivePointer during Tile loading.
kring Apr 15, 2025
6ee6210
Remove CESIUM_DEBUG_TILE_UNLOADING.
kring Apr 15, 2025
a2657e3
Remove rambling and redundant comment.
kring Apr 15, 2025
4f29c7b
Assert that content isn't set twice.
kring Apr 15, 2025
5fc9ed5
Rename functions.
kring Apr 15, 2025
23fc5b2
Comment tweak.
kring Apr 15, 2025
0b0cb86
clang-tidy
kring Apr 15, 2025
79bfe21
Add some assertions.
kring Apr 16, 2025
9a4a3e3
Revert "Remove CESIUM_DEBUG_TILE_UNLOADING."
kring Apr 16, 2025
a973df4
Keep TilesetContentManager alive while Tiles are alive.
kring Apr 17, 2025
00c575d
More ref count cleanup, fix tests.
kring Apr 17, 2025
ba8d790
Fix assertion failure.
kring Apr 17, 2025
6415b9a
Remove unnecessary changes.
kring Apr 17, 2025
463b91b
Add some doc, simplify some logic.
kring Apr 17, 2025
4de9c08
More cleanup.
kring Apr 17, 2025
4d2241d
Fix clang warnings.
kring Apr 17, 2025
c19cbe1
Clang-tidy
kring Apr 17, 2025
37cbd9c
clang-tidy.
kring Apr 17, 2025
c6c498e
Merge remote-tracking branch 'origin/main' into multiple-views
kring Apr 23, 2025
74b919d
Merge remote-tracking branch 'origin/multiple-views' into multiple-vi…
kring Apr 23, 2025
6107fec
Add updateViewGroupOffline method.
kring Apr 23, 2025
cc4e1a5
Deprecate updateView / updateViewOffline.
kring Apr 23, 2025
2a7d6b0
Update CHANGES.md.
kring Apr 23, 2025
87c9ae7
Doc improvements.
kring Apr 23, 2025
bec1332
Update doc for correct method
j9liu Apr 23, 2025
ce2c0b4
Address review comments.
kring Apr 24, 2025
d94e7d4
Merge remote-tracking branch 'origin/multiple-views-one-reference-cou…
kring Apr 24, 2025
8a43074
Use hasReferencingContent in assert
j9liu Apr 24, 2025
be4a0ab
Merge pull request #1156 from CesiumGS/multiple-views-one-reference-c…
j9liu Apr 24, 2025
ad575e3
Merge pull request #1160 from CesiumGS/multiple-views-more
j9liu Apr 24, 2025
cd5d4af
Merge remote-tracking branch 'origin/main' into multiple-views
kring Apr 28, 2025
fc83ace
Merge branch 'main' into multiple-views
j9liu Apr 28, 2025
70b97bb
Fix failing unit test
j9liu Apr 28, 2025
c0fd95b
Merge branch 'main' into multiple-views
j9liu Apr 29, 2025
2dcabd6
Remove calls to ViewState::create
j9liu Apr 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,39 @@

### ? - ?

##### Additions
##### Breaking Changes :mega:

- Removed `addCreditToFrame`, `startNextFrame`, `getCreditsToShowThisFrame`, and `getCreditsToNoLongerShowThisFrame` from `CreditSystem`. `CreditSystem` no longer has a notion of a "frame". Instead, credits are included and excluded by calling `addCreditReference` and `removeCreditReference`. A snaphot of the current state can be obtained by calling `getSnapshot`, and it includes both the current set of active credits as well as the credits that were removed since the last snapshot.
- Removed the following from `Cesium3DTilesSelection::Tile`:
- `getLastSelectionState` and `setLastSelectionState`. Use `TilesetViewGroup::getTraversalState` instead.
- `Tile::LoadedLinkedList`. Use `LoadedTileEnumerator` instead.
- The `RasterOverlayCollection` constructor now takes a `LoadedTileEnumerator` instead of a `Tile::LoadedLinkedList`.
- `TileSelectionState` no longer uses or requires a frame number. This parameter has been removed from its various methods.
- Derived `TilesetContentLoader` classes that aggregate other loaders must now implement `setOwnerOfNestedLoaders` to pass the owner through.
- `DebugTileStateDatabase::recordAllTileStates` and `recordTileState` now must be given a `TilesetViewGroup` indicating which view group to record states for.

##### Additions :tada:

- Added `convertAccessorTypeToPropertyType` and `convertPropertyTypeToAccessorType` to `CesiumGltf::PropertyType`.
- Added support for building in `vcpkg` manifest 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 `CreditReferencer` which makes it easy to track credits in a frame-oriented fashion similar to how `CreditSystem::addCreditToFrame` worked in previous releases.
- Added a `std::hash` implementation for `IntrusivePointer` that simply hashes the underlying pointer.
- Added `Math::GoldenRatio`.
- Added `TreeTraversalState` to `CesiumUtility`. It can be used to associate arbitrary data with individual nodes during a depth-first tree traversal and access that data in a later traversal.
- Added `LoadedTileEnumerator` to enumerate the loaded tiles in a `Tile` subtree.
- Added `RasterOverlayCollection::setLoadedTileEnumerator`.
- Added `TileLoadRequester`, which allows influence over which tiles in a `Cesium3DTilesSelection::Tileset` are loaded. This is the base class for `TilesetViewGroup` and `TilesetHeightRequest`.
- Added `TileLoadTask`, `TileLoadPriorityGroup`, and `TilesetFrameState`. Previously these types were private.
- Added the following to `Cesium3DTilesSelection::Tileset`:
- `getUserCredit` - Reflects the `Credit` passed as a string into `TilesetOptions::credit`.
- `loadedTiles`- Allows enumeration of the tileset's loaded tiles.
- `getDefaultViewGroup` - Gets the default view group that is used when `updateView` is called.
- `updateViewGroup` - Updates the set of tiles to render for a `TilesetViewGroup`, as well as the set of tiles that the view group would like to load.
- `loadTiles` - Loads tiles that have been identified as required across all `TilesetViewGroup` and `TilesetHeightRequest` instances, up to limits specified in `TilesetOptions`.
- `TilesetContentLoader` instances now know the `TilesetContentManager` that owns them. This is managed with new `getOwner` and `setOwner` methods.

##### Fixes :wrench:

### v0.46.0 - 2025-04-01

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class QuadtreeChildren {

/** @brief Returns an iterator starting at the first child. */
iterator begin() const noexcept;
/** @brief Returns an iterator starting at the last child. */
/** @brief Returns an iterator starting after the last child. */
iterator end() const noexcept;
/**
* @brief Returns the total number of \ref CesiumGeometry::QuadtreeTileID
Expand Down Expand Up @@ -217,7 +217,7 @@ class OctreeChildren {
: _tileID(tileID) {}
/** @brief Returns an iterator starting at the first child. */
iterator begin() const noexcept;
/** @brief Returns an iterator starting at the last child. */
/** @brief Returns an iterator starting after the last child. */
iterator end() const noexcept;
/**
* @brief Returns the total number of \ref CesiumGeometry::OctreeTileID
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
#pragma once

#include <Cesium3DTilesSelection/TileSelectionState.h>
#include <CesiumUtility/IntrusivePointer.h>

#include <memory>
#include <string>
#include <unordered_map>

namespace Cesium3DTilesSelection {

class Tile;
class Tileset;
class TilesetViewGroup;

/**
* @brief Helps debug the tile selection algorithm by recording the state of
Expand All @@ -27,18 +32,50 @@ class DebugTileStateDatabase {
* @brief Records the state of all tiles that are currently loaded by the
* given tileset.
*
* The state is obtained from the view group's
* {@link TilesetViewGroup::getTraversalState} by calling
* {@link CesiumUtility::TreeTraversalState::slowlyGetPreviousStates}.
*
* @param frameNumber The current frame number.
* @param tileset The tileset.
* @param viewGroup The view group.
*/
void recordAllTileStates(int32_t frameNumber, const Tileset& tileset);
void recordAllTileStates(
int32_t frameNumber,
const Tileset& tileset,
const TilesetViewGroup& viewGroup);

/**
* @brief Records the state of a given tile.
*
* The state is obtained from the view group's
* {@link TilesetViewGroup::getTraversalState} by calling
* {@link CesiumUtility::TreeTraversalState::slowlyGetPreviousStates}.
*
* @param frameNumber The current frame number.
* @param viewGroup The view group.
* @param tile The tile.
*/
void recordTileState(
int32_t frameNumber,
const TilesetViewGroup& viewGroup,
const Tile& tile);

/**
* @brief Records the state of a given tile.
*
* The state is obtained from the provided map.
*
* @param frameNumber The current frame number.
* @param tile The tile.
* @param states The lookup table for tile states.
*/
void recordTileState(int32_t frameNumber, const Tile& tile);
void recordTileState(
int32_t frameNumber,
const Tile& tile,
const std::unordered_map<
CesiumUtility::IntrusivePointer<const Tile>,
TileSelectionState>& states);

private:
struct Impl;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
#pragma once

#include <iterator>
#include <vector>

namespace Cesium3DTilesSelection {

class Tile;
class TilesetContentManager;

// The LoadedConstTileEnumerator and LoadedTileEnumerator could probably be
// replaced with ranges, except that we need to support Android and range
// support prior to NDK r26 is shaky. Unreal Engine 5.5 uses r25b and Unity
// 2022.3 uses r23b. See here: https://github.com/android/ndk/issues/1530

/**
* @brief A "virtual collection" that allows enumeration through the loaded
* tiles in a subtree rooted at a given {@link Tile}.
*
* For the purposes of this enumeration, a loaded tile is one that is in a
* {@link TileLoadState} other than {@link TileLoadState::Unloaded}, or that
* has any children (or other descendants) that meet this criteria. We check the
* latter criteria by looking at {@link Tile::getDoNotUnloadSubtreeCount}.
*/
class LoadedConstTileEnumerator {
public:
/**
* @brief An iterator over constant {@link Tile} instances.
*/
class const_iterator {
public:
/**
* @brief The iterator category tag denoting this is a forward iterator.
*/
using iterator_category = std::forward_iterator_tag;
/**
* @brief The type of value that is being iterated over.
*/
using value_type = const Tile;
/**
* @brief The type used to identify distance between iterators.
*
* This is `void` because there is no meaningful measure of distance between
* tiles.
*/
using difference_type = void;
/**
* @brief A pointer to the type being iterated over.
*/
using pointer = const Tile*;
/**
* @brief A reference to the type being iterated over.
*/
using reference = const Tile&;

/**
* @brief Returns a reference to the current item being iterated.
*/
const Tile& operator*() const noexcept;
/**
* @brief Returns a pointer to the current item being iterated.
*/
const Tile* operator->() const noexcept;

/**
* @brief Advances the iterator to the next item (pre-incrementing).
*/
const_iterator& operator++() noexcept;
/**
* @brief Advances the iterator to the next item (post-incrementing).
*/
const_iterator operator++(int) noexcept;

/** @brief Checks if two iterators are at the same item. */
bool operator==(const const_iterator& rhs) const noexcept;
/** @brief Checks if two iterators are not at the same item. */
bool operator!=(const const_iterator& rhs) const noexcept;

private:
explicit const_iterator(const Tile* pRootTile) noexcept;

std::vector<const Tile*> _traversalStack;

friend class LoadedTileEnumerator;
friend class LoadedConstTileEnumerator;
};

/**
* @brief Creates a new instance to enumerate loaded tiles in the subtree
* rooted at `pRootTile`.
*
* If `pRootTile` is `nullptr`, then the iteration is empty (`begin==end`).
* Otherwise, the iteration will include at least `pRootTile`, even if it is
* not loaded.
*
* @param pRootTile The root tile of the subtree.
*/
explicit LoadedConstTileEnumerator(const Tile* pRootTile) noexcept;

/** @brief Returns an iterator starting at the first tile. */
const_iterator begin() const noexcept;
/** @brief Returns an iterator starting after the last tile. */
const_iterator end() const noexcept;

private:
const Tile* _pRootTile;

template <typename TIterator> static TIterator& increment(TIterator& it);
friend class LoadedTileEnumerator;
};

/** @copydoc LoadedConstTileEnumerator */
class LoadedTileEnumerator {
public:
/**
* @brief An iterator over constant {@link Tile} instances.
*/
using const_iterator = LoadedConstTileEnumerator::const_iterator;

/**
* @brief An iterator over {@link Tile} instances.
*/
class iterator {
public:
/**
* @brief The iterator category tag denoting this is a forward iterator.
*/
using iterator_category = std::forward_iterator_tag;
/**
* @brief The type of value that is being iterated over.
*/
using value_type = Tile;
/**
* @brief The type used to identify distance between iterators.
*
* This is `void` because there is no meaningful measure of distance between
* tiles.
*/
using difference_type = void;
/**
* @brief A pointer to the type being iterated over.
*/
using pointer = Tile*;
/**
* @brief A reference to the type being iterated over.
*/
using reference = Tile&;

/**
* @brief Returns a reference to the current item being iterated.
*/
Tile& operator*() const noexcept;
/**
* @brief Returns a pointer to the current item being iterated.
*/
Tile* operator->() const noexcept;

/**
* @brief Advances the iterator to the next item (pre-incrementing).
*/
iterator& operator++() noexcept;
/**
* @brief Advances the iterator to the next item (post-incrementing).
*/
iterator operator++(int) noexcept;

/** @brief Checks if two iterators are at the same item. */
bool operator==(const iterator& rhs) const noexcept;
/** @brief Checks if two iterators are not at the same item. */
bool operator!=(const iterator& rhs) const noexcept;

private:
explicit iterator(Tile* pRootTile) noexcept;

std::vector<Tile*> _traversalStack;

friend class LoadedTileEnumerator;
friend class LoadedConstTileEnumerator;
};

/** @copydoc LoadedConstTileEnumerator::LoadedConstTileEnumerator */
explicit LoadedTileEnumerator(Tile* pRootTile) noexcept;

/** @brief Returns an iterator starting at the first tile. */
const_iterator begin() const noexcept;
/** @brief Returns an iterator starting after the last tile. */
const_iterator end() const noexcept;

/** @brief Returns an iterator starting at the first tile. */
iterator begin() noexcept;
/** @brief Returns an iterator starting after the last tile. */
iterator end() noexcept;

private:
Tile* _pRootTile;
};

} // namespace Cesium3DTilesSelection
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include <Cesium3DTilesSelection/Library.h>
#include <Cesium3DTilesSelection/LoadedTileEnumerator.h>
#include <Cesium3DTilesSelection/TilesetExternals.h>
#include <CesiumGeospatial/Ellipsoid.h>
#include <CesiumRasterOverlays/RasterOverlay.h>
Expand All @@ -15,6 +16,8 @@

namespace Cesium3DTilesSelection {

class LoadedTileEnumerator;

/**
* @brief A collection of {@link CesiumRasterOverlays::RasterOverlay} instances that are associated
* with a {@link Tileset}.
Expand All @@ -31,18 +34,31 @@ class CESIUM3DTILESSELECTION_API RasterOverlayCollection final {
/**
* @brief Creates a new instance.
*
* @param loadedTiles The list of loaded tiles. The collection does not own
* this list, so the list needs to be kept alive as long as the collection's
* lifetime
* @param loadedTiles An enumerator for the loaded tiles. The raster overlay
* collection will copy this enumerator, and the copy must remain valid for
* the lifetime of the overlay collection or until \ref
* setLoadedTileEnumerator is called with a new enumerator.
* @param externals A collection of loading system to load a raster overlay
* @param ellipsoid The {@link CesiumGeospatial::Ellipsoid}.
*/
RasterOverlayCollection(
Tile::LoadedLinkedList& loadedTiles,
const LoadedTileEnumerator& loadedTiles,
const TilesetExternals& externals,
const CesiumGeospatial::Ellipsoid& ellipsoid
CESIUM_DEFAULT_ELLIPSOID) noexcept;

/**
* @brief Provides a new \ref LoadedTileEnumerator to use to update
* loaded tiles when a raster overlay is added or removed.
*
* The raster overlay collection will copy this enumerator, and the copy must
* remain valid for the lifetime of the overlay collection or until \ref
* setLoadedTileEnumerator is called with a new enumerator.
*
* @param loadedTiles The new loaded tile enumerator.
*/
void setLoadedTileEnumerator(const LoadedTileEnumerator& loadedTiles);

/**
* @brief Deleted Copy constructor.
*
Expand Down Expand Up @@ -206,7 +222,7 @@ class CESIUM3DTILESSELECTION_API RasterOverlayCollection final {
placeholders{};
};

Tile::LoadedLinkedList* _pLoadedTiles;
LoadedTileEnumerator _loadedTiles;
TilesetExternals _externals;
CesiumGeospatial::Ellipsoid _ellipsoid;
CesiumUtility::IntrusivePointer<OverlayList> _pOverlays;
Expand Down
Loading
Loading