Skip to main content

SceneToViewportMap.ixx File

Mapping between scene handles and their associated viewport handles. More...

Included Headers

#include <vector> #include <span> #include <cassert> #include <helios.scene.types.SceneHandle> #include <helios.rendering.viewport.types.ViewportHandle>

Namespaces Index

namespacehelios
namespaceengine

Main engine module aggregating core infrastructure and game systems. More...

namespacemodules

Domain-specific components and systems. More...

namespacescene

Scene graph integration for game entities. More...

namespacetypes

Types and data structures for scene management. More...

namespacetypes
namespacetypes

Classes Index

classSceneToViewportMap

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

Description

Mapping between scene handles and their associated viewport handles.

File Listing

The file content with the documentation metadata removed is:

1/**
2 * @file SceneToViewportMap.ixx
3 * @brief Mapping between scene handles and their associated viewport handles.
4 */
5module;
6
7#include <vector>
8#include <span>
9#include <cassert>
10
11export module helios.engine.modules.scene.types.SceneToViewportMap;
12
13import helios.rendering.viewport.types.ViewportHandle;
14import helios.scene.types.SceneHandle;
15
16using namespace helios::scene::types;
17using namespace helios::rendering::viewport::types;
18
20
21 /**
22 * @brief Maps scenes to their associated viewports for rendering.
23 *
24 * @details SceneToViewportMap maintains the relationship between Scene
25 * objects and Viewport objects. A scene can be rendered through multiple
26 * viewports (e.g., split-screen), and a viewport renders exactly one scene (1:N).
27 *
28 * @see SceneRenderingSystem
29 * @see Scene
30 * @see Viewport
31 */
33
34 /**
35 * @brief Scene-indexed list of associated viewport handles.
36 */
37 std::vector<std::vector<ViewportHandle>> sceneToViewportHandles_;
38
39 /**
40 * @brief Viewport-indexed reverse lookup to the owning scene handle.
41 */
42 std::vector<SceneHandle> viewportToSceneHandles_;
43
44 public:
45
46 explicit SceneToViewportMap() = default;
47
48 /**
49 * @brief Registers a scene-viewport association.
50 *
51 * @details Adds the viewport to the scene's viewport list. A scene can
52 * have multiple viewports, but each viewport can only be added once.
53 *
54 * @param sceneHandle Handle of the scene to associate.
55 * @param viewportHandle Handle of the viewport to register.
56 *
57 * @return true if the viewportHandle was successfully registered for the SceneHandle,
58 * otehrwise false
59 */
60 bool add(const SceneHandle sceneHandle, const ViewportHandle viewportHandle) {
61
62 const auto denseSceneIdx = sceneHandle.entityId;
63 const auto denseViewportIdx = viewportHandle.entityId;
64
65 // assert that the viewport was not already registered.
66 if (viewportHandle.entityId >= viewportToSceneHandles_.size()
67 || !viewportToSceneHandles_[denseViewportIdx].isValid()) {
68 assert(false && "Viewport already exists");
69 return false;
70 }
71
72 // scene idx to viewport handles
73 if (sceneToViewportHandles_.size() <= denseSceneIdx) {
74 sceneToViewportHandles_.resize(denseSceneIdx + 1);
75 }
76 sceneToViewportHandles_[denseSceneIdx].push_back(viewportHandle);
77
78 // viewport idx to scene handles
79 if (viewportToSceneHandles_.size() <= denseViewportIdx) {
80 viewportToSceneHandles_.resize(denseViewportIdx + 1);
81 }
82 viewportToSceneHandles_[denseViewportIdx] = sceneHandle;
83
84 return true;
85 }
86
87 /**
88 * @brief Returns the scene associated with a viewport.
89 *
90 * @param viewportHandle Handle of the viewport to look up.
91 *
92 * @return The associated scene handle, or an invalid handle if not found.
93 */
94 [[nodiscard]] SceneHandle sceneHandle(const ViewportHandle viewportHandle) const noexcept {
95 const auto denseViewportIdx = viewportHandle.entityId;
96
97 if (viewportToSceneHandles_.size() <= denseViewportIdx) {
98 return SceneHandle{};
99 }
100
101 return viewportToSceneHandles_[denseViewportIdx];
102 }
103
104 /**
105 * @brief Returns all viewports associated with a scene.
106 *
107 * @param sceneHandle Handle of the scene to look up.
108 *
109 * @return A span of viewport handles, or an empty span if not found.
110 */
111 [[nodiscard]] std::span<const ViewportHandle> viewportHandles(const SceneHandle sceneHandle) const noexcept {
112
113 const auto denseSceneIdx = sceneHandle.entityId;
114
115 if (sceneToViewportHandles_.size() <= denseSceneIdx) {
116 return {};
117 }
118
119 return sceneToViewportHandles_[denseSceneIdx];
120 }
121
122
123 };
124
125}

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.