Skip to main content

SceneToViewportMap Class

Maps scenes to their associated viewports for rendering. More...

Declaration

class helios::engine::modules::scene::types::SceneToViewportMap { ... }

Public Constructors Index

SceneToViewportMap ()=default

Default constructor. More...

Public Member Functions Index

voidupdateCache () const

Rebuilds the internal cache if modifications were made. More...

voidadd (Scene *scene, Viewport *viewport)

Registers a scene-viewport association. More...

Scene *scene (ViewportId viewportId) const noexcept

Returns the scene associated with a viewport ID. More...

std::span< Viewport * >viewports (SceneId sceneId) const noexcept

Returns all viewports associated with a scene. More...

std::span< Scene * >scenes () const noexcept

Returns all registered scenes. More...

boolhasScene (const SceneId sceneId) const noexcept

Checks if a scene is registered. More...

Viewport *viewport (SceneId sceneId, ViewportId viewportId) const noexcept

Returns a specific viewport for a scene. More...

Private Member Attributes Index

std::vector< Scene * >scenes_

All registered scenes. More...

std::vector< Viewport * >viewports_

All registered viewports. More...

std::unordered_map< SceneId, std::vector< ViewportId > >sceneIdsToViewportIds_

Maps scene IDs to their associated viewport IDs. More...

std::unordered_map< SceneId, std::vector< Viewport * > >viewportMap_

Cached mapping from scene IDs to viewport pointers. More...

boolneedsUpdate_ = false

Flag indicating the cache needs rebuilding. More...

Description

Maps scenes to their associated viewports for rendering.

SceneToViewportMap maintains the relationship between Scene objects and Viewport objects. A scene can be rendered through multiple viewports (e.g., split-screen), and a viewport renders exactly one scene.

The map uses lazy caching: the internal lookup structures are rebuilt only when `updateCache()` is called after modifications.

## Usage

```cpp SceneToViewportMap map; map.add(&gameScene, &mainViewport); map.add(&uiScene, &hudViewport);

// Query scene for viewport auto* scene = map.scene(viewportId);

// Query viewport for scene auto* viewport = map.viewport(sceneId, viewportId); ```

See Also

SceneRenderingSystem

See Also

Scene

See Also

Viewport

Definition at line 55 of file SceneToViewportMap.ixx.

Public Constructors

SceneToViewportMap()

helios::engine::modules::scene::types::SceneToViewportMap::SceneToViewportMap ()
default

Default constructor.

Definition at line 87 of file SceneToViewportMap.ixx.

Public Member Functions

add()

void helios::engine::modules::scene::types::SceneToViewportMap::add (Scene * scene, Viewport * viewport)
inline

Registers a scene-viewport association.

Adds the viewport to the scene's viewport list. A scene can have multiple viewports, but each viewport can only be added once.

Parameters
scene

Pointer to the scene. Must not be null.

viewport

Pointer to the viewport. Must not be null or already registered.

Definition at line 125 of file SceneToViewportMap.ixx.

126
127 const bool viewportExists = std::ranges::find(viewports_, viewport) != viewports_.end();
128 assert(!viewportExists && "Viewport already exists");
129 if (viewportExists) {
130 return;
131 }
132
133 const bool sceneExists = hasScene(scene->sceneId());
134
135 sceneIdsToViewportIds_[scene->sceneId()].push_back(viewport->viewportId());
136 viewports_.push_back(viewport);
137
138 if (!sceneExists) {
139 scenes_.push_back(scene);
140 }
141
142 needsUpdate_ = true;
143 }

References hasScene, scene and viewport.

hasScene()

bool helios::engine::modules::scene::types::SceneToViewportMap::hasScene (const SceneId sceneId)
inline noexcept

Checks if a scene is registered.

Parameters
sceneId

The scene identifier to check.

Returns

True if the scene is registered, false otherwise.

Definition at line 202 of file SceneToViewportMap.ixx.

202 bool hasScene(const SceneId sceneId) const noexcept {
203 return sceneIdsToViewportIds_.contains(sceneId);
204 }

Referenced by add, viewport and viewports.

scene()

Scene * helios::engine::modules::scene::types::SceneToViewportMap::scene (ViewportId viewportId)
inline noexcept

Returns the scene associated with a viewport ID.

Parameters
viewportId

The viewport identifier to look up.

Returns

Pointer to the scene, or nullptr if not found.

Definition at line 152 of file SceneToViewportMap.ixx.

152 Scene* scene(ViewportId viewportId) const noexcept {
154
155
156 for (auto [sceneId, viewportIds] : sceneIdsToViewportIds_) {
157 if (std::ranges::find(viewportIds, viewportId) != viewportIds.end()) {
158 for (auto scene : scenes_) {
159 if (scene->sceneId() == sceneId) {
160 return scene;
161 }
162 }
163 }
164 }
165
166 return nullptr;
167 }

References scene and updateCache.

Referenced by add and scene.

scenes()

std::span< Scene * > helios::engine::modules::scene::types::SceneToViewportMap::scenes ()
inline noexcept

Returns all registered scenes.

Returns

Span of scene pointers.

Definition at line 191 of file SceneToViewportMap.ixx.

191 std::span<Scene*> scenes() const noexcept {
192 return scenes_;
193 }

updateCache()

void helios::engine::modules::scene::types::SceneToViewportMap::updateCache ()
inline

Rebuilds the internal cache if modifications were made.

Called lazily by query methods. Rebuilds the viewportMap_ from the scene-to-viewport-ID mappings.

Definition at line 95 of file SceneToViewportMap.ixx.

95 void updateCache() const {
96
97 if (!needsUpdate_) {
98 return;
99 }
100
101 viewportMap_.clear();
102 for (const auto& [sceneId, viewportIds] : sceneIdsToViewportIds_) {
103 for (auto viewportId : viewportIds) {
104 for (auto viewport : viewports_) {
105 if (viewport->viewportId() == viewportId) {
106 viewportMap_[sceneId].push_back(viewport);
107 }
108 }
109 }
110 }
111
112
113 needsUpdate_ = false;
114 }

Reference viewport.

Referenced by scene, viewport and viewports.

viewport()

Viewport * helios::engine::modules::scene::types::SceneToViewportMap::viewport (SceneId sceneId, ViewportId viewportId)
inline noexcept

Returns a specific viewport for a scene.

Parameters
sceneId

The scene identifier.

viewportId

The viewport identifier.

Returns

Pointer to the viewport, or nullptr if not found.

Definition at line 214 of file SceneToViewportMap.ixx.

214 Viewport* viewport(SceneId sceneId, ViewportId viewportId) const noexcept {
216
217 if (!hasScene(sceneId)) {
218 return nullptr;
219 }
220
221 for (auto viewport : viewportMap_[sceneId]) {
222 if (viewport->viewportId() == viewportId) {
223 return viewport;
224 }
225 }
226
227 return nullptr;
228 }

References hasScene, updateCache and viewport.

Referenced by add, updateCache and viewport.

viewports()

std::span< Viewport * > helios::engine::modules::scene::types::SceneToViewportMap::viewports (SceneId sceneId)
inline noexcept

Returns all viewports associated with a scene.

Parameters
sceneId

The scene identifier to look up.

Returns

Span of viewport pointers, or empty span if not found.

Definition at line 176 of file SceneToViewportMap.ixx.

176 std::span<Viewport*> viewports(SceneId sceneId) const noexcept {
178
179 if (!hasScene(sceneId)) {
180 return {};
181 }
182
183 return viewportMap_[sceneId];
184 }

References hasScene and updateCache.

Private Member Attributes

needsUpdate_

bool helios::engine::modules::scene::types::SceneToViewportMap::needsUpdate_ = false
mutable

Flag indicating the cache needs rebuilding.

Definition at line 80 of file SceneToViewportMap.ixx.

80 mutable bool needsUpdate_ = false;

sceneIdsToViewportIds_

std::unordered_map<SceneId, std::vector<ViewportId> > helios::engine::modules::scene::types::SceneToViewportMap::sceneIdsToViewportIds_
mutable

Maps scene IDs to their associated viewport IDs.

Definition at line 70 of file SceneToViewportMap.ixx.

70 mutable std::unordered_map<SceneId, std::vector<ViewportId>> sceneIdsToViewportIds_;

scenes_

std::vector<Scene*> helios::engine::modules::scene::types::SceneToViewportMap::scenes_
mutable

All registered scenes.

Definition at line 60 of file SceneToViewportMap.ixx.

60 mutable std::vector<Scene*> scenes_;

viewportMap_

std::unordered_map<SceneId, std::vector<Viewport*> > helios::engine::modules::scene::types::SceneToViewportMap::viewportMap_
mutable

Cached mapping from scene IDs to viewport pointers.

Definition at line 75 of file SceneToViewportMap.ixx.

75 mutable std::unordered_map<SceneId, std::vector<Viewport*>> viewportMap_;

viewports_

std::vector<Viewport*> helios::engine::modules::scene::types::SceneToViewportMap::viewports_
mutable

All registered viewports.

Definition at line 65 of file SceneToViewportMap.ixx.

65 mutable std::vector<Viewport*> viewports_;

The documentation for this class was generated from the following file:


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.