Skip to main content

SceneMemberVisibilityRegistry Class Template

Stores per-viewport visibility/culling results for scene members. More...

Declaration

template <typename TMemberHandle> class helios::engine::scene::SceneMemberVisibilityRegistry<TMemberHandle> { ... }

Public Constructors Index

template <typename TMemberHandle>
SceneMemberVisibilityRegistry ()

Constructs the registry with pre-reserved top-level storage. More...

Public Member Functions Index

template <typename TMemberHandle>
voidaddSceneRenderContext (SceneRenderContext< TMemberHandle > &&context)

Adds a scene render context if it is not already present. More...

template <typename TMemberHandle>
auto sceneRenderContexts () const noexcept -> std::span< const SceneRenderContext< TMemberHandle > >

Returns all registered scene render contexts. More...

template <typename TSubmissionMode>
voidaddCulledMember (const ViewportHandle viewportHandle, SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > &&context)

Adds a culled member visibility context for a viewport. More...

template <typename TSubmissionMode>
voidaddVisibleMember (const ViewportHandle viewportHandle, SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > &&context)

Adds a visible member visibility context for a viewport. More...

template <typename TSubmissionMode>
auto culledMembers (const ViewportHandle viewportHandle={}) -> std::span< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > >

Returns culled member contexts for one viewport. More...

template <typename TSubmissionMode>
auto culledMembers () const -> std::span< std::vector< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > > >

Returns culled member context buckets for all viewports. More...

template <typename TSubmissionMode>
auto visibleMembers (const ViewportHandle viewportHandle) -> std::span< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > >

Returns visible member contexts for one viewport. More...

template <typename TSubmissionMode>
auto visibleMembers () -> std::span< std::vector< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > > >

Returns visible member context buckets for all viewports. More...

template <typename TMemberHandle>
voidclear ()

Clears all accumulated render and visibility state. More...

Private Member Attributes Index

template <typename TMemberHandle>
std::vector< RenderTargetViewportSceneKey >renderTargetViewportSceneKeys_
template <typename TMemberHandle>
std::vector< std::vector< SceneMemberVisibilityContext< TMemberHandle, Instanced > > >visibilityContextsInstanced_
template <typename TMemberHandle>
std::vector< std::vector< SceneMemberVisibilityContext< TMemberHandle, Instanced > > >culledContextsInstanced_
template <typename TMemberHandle>
std::vector< std::vector< SceneMemberVisibilityContext< TMemberHandle, NonInstanced > > >visibilityContextsNonInstanced_
template <typename TMemberHandle>
std::vector< std::vector< SceneMemberVisibilityContext< TMemberHandle, NonInstanced > > >culledContextsNonInstanced_
template <typename TMemberHandle>
std::vector< SceneRenderContext< TMemberHandle > >sceneRenderContexts_

Description

Stores per-viewport visibility/culling results for scene members.

The registry separates members by submission mode (Instanced vs NonInstanced) and by viewport handle index for fast retrieval during render submission.

Template Parameters
TMemberHandle

Handle type used to reference scene members.

Definition at line 45 of file SceneMemberVisibilityRegistry.ixx.

Public Constructors

SceneMemberVisibilityRegistry()

template <typename TMemberHandle>
helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::SceneMemberVisibilityRegistry ()
inline

Constructs the registry with pre-reserved top-level storage.

Definition at line 72 of file SceneMemberVisibilityRegistry.ixx.

73 visibilityContextsInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
74 for (auto& vec : visibilityContextsInstanced_) {
76 }
77 culledContextsInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
78 for (auto& vec : culledContextsInstanced_) {
80 }
81 visibilityContextsNonInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
82 for (auto& vec : visibilityContextsNonInstanced_) {
84 }
85 culledContextsNonInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
86 for (auto& vec : culledContextsNonInstanced_) {
88 }
89
90 sceneRenderContexts_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
91 }

References DEFAULT_VIEWPORT_POOL_CAPACITY, HELIOS_DEFAULT_VISIBLE_MEMBER_CAPACITY and helios::engine::scene::registerComponents.

Public Member Functions

addCulledMember()

template <typename TSubmissionMode>
void helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addCulledMember (const ViewportHandle viewportHandle, SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > && context)
inline

Adds a culled member visibility context for a viewport.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Parameters
viewportHandle

Target viewport.

context

Visibility context to append.

Definition at line 125 of file SceneMemberVisibilityRegistry.ixx.

126 const auto idx = viewportHandle.entityId;
127 if constexpr (std::is_same_v<TSubmissionMode, NonInstanced>) {
128 if (culledContextsNonInstanced_.size() <= idx) {
129 culledContextsNonInstanced_.resize(idx + 1);
130 }
131 culledContextsNonInstanced_[idx].emplace_back(std::move(context));
132 } else if constexpr (std::is_same_v<TSubmissionMode, Instanced>) {
133 if (culledContextsInstanced_.size() <= idx) {
134 culledContextsInstanced_.resize(idx + 1);
135 }
136 culledContextsInstanced_[idx].emplace_back(std::move(context));
137 } else {
138 static_assert(false, "Unsupported submission mode");
139 }
140 }

Reference helios::engine::scene::registerComponents.

addSceneRenderContext()

template <typename TMemberHandle>
void helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addSceneRenderContext (SceneRenderContext< TMemberHandle > && context)
inline

Adds a scene render context if it is not already present.

Parameters
context

Render context to insert.

Definition at line 98 of file SceneMemberVisibilityRegistry.ixx.

99
100 for (const auto& existingContext : sceneRenderContexts_) {
101 if (existingContext == context) {
102 return;
103 }
104 }
105
106 sceneRenderContexts_.push_back(std::move(context));
107 }

Reference helios::engine::scene::registerComponents.

addVisibleMember()

template <typename TSubmissionMode>
void helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addVisibleMember (const ViewportHandle viewportHandle, SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > && context)
inline

Adds a visible member visibility context for a viewport.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Parameters
viewportHandle

Target viewport.

context

Visibility context to append.

Definition at line 150 of file SceneMemberVisibilityRegistry.ixx.

151
152 const auto idx = viewportHandle.entityId;
153
154 if constexpr (std::is_same_v<TSubmissionMode, Instanced>) {
155 if (visibilityContextsInstanced_.size() <= idx) {
156 visibilityContextsInstanced_.resize(idx + 1);
157 }
158
159 visibilityContextsInstanced_[idx].emplace_back(std::move(context));
160 } else if constexpr (std::is_same_v<TSubmissionMode, NonInstanced>) {
161 if (visibilityContextsNonInstanced_.size() <= idx) {
162 visibilityContextsNonInstanced_.resize(idx + 1);
163 }
164
165 visibilityContextsNonInstanced_[idx].emplace_back(std::move(context));
166 } else {
167 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
168 }
169
170 }

Reference helios::engine::scene::registerComponents.

clear()

template <typename TMemberHandle>
void helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::clear ()
inline

Clears all accumulated render and visibility state.

Definition at line 256 of file SceneMemberVisibilityRegistry.ixx.

256 void clear () {
257 sceneRenderContexts_.clear();
258 for (auto& vec : visibilityContextsInstanced_) {
259 vec.clear();
260 }
261 for (auto& vec : visibilityContextsNonInstanced_) {
262 vec.clear();
263 }
264 for (auto& vec : culledContextsInstanced_) {
265 vec.clear();
266 }
267 for (auto& vec : culledContextsNonInstanced_) {
268 vec.clear();
269 }
270 }

Reference helios::engine::scene::registerComponents.

Referenced by helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::update.

culledMembers()

template <typename TSubmissionMode>
std::span< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::culledMembers (const ViewportHandle viewportHandle={})
inline

Returns culled member contexts for one viewport.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Parameters
viewportHandle

Viewport to query.

Definition at line 178 of file SceneMemberVisibilityRegistry.ixx.

178 [[nodiscard]] std::span<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>> culledMembers(const ViewportHandle viewportHandle = {}) {
179 const auto idx = viewportHandle.entityId;
180 if constexpr (std::is_same_v<TSubmissionMode, NonInstanced>) {
181 if (idx >= culledContextsNonInstanced_.size()) {
182 return {};
183 }
184 return culledContextsNonInstanced_[idx];
185 } else if constexpr (std::is_same_v<TSubmissionMode, Instanced>) {
186 if (idx >= culledContextsInstanced_.size()) {
187 return {};
188 }
189 return culledContextsInstanced_[idx];
190 } else {
191 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
192 }
193 return {};
194 }

culledMembers()

template <typename TSubmissionMode>
std::span< std::vector< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::culledMembers ()
inline

Returns culled member context buckets for all viewports.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Definition at line 201 of file SceneMemberVisibilityRegistry.ixx.

201 [[nodiscard]] std::span<std::vector<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>>> culledMembers() const {
202 if constexpr (std::is_same_v<TSubmissionMode, NonInstanced>) {
203 return culledContextsNonInstanced_;
204 } else if constexpr (std::is_same_v<TSubmissionMode, Instanced>) {
205 return culledContextsInstanced_;
206 } else {
207 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
208 }
209 return {};
210 }

Reference helios::engine::scene::registerComponents.

sceneRenderContexts()

template <typename TMemberHandle>
std::span< const SceneRenderContext< TMemberHandle > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::sceneRenderContexts ()
inline noexcept

Returns all registered scene render contexts.

Definition at line 112 of file SceneMemberVisibilityRegistry.ixx.

112 [[nodiscard]] std::span<const SceneRenderContext<TMemberHandle>> sceneRenderContexts() const noexcept {
113 return sceneRenderContexts_;
114 }

Referenced by helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCommandBuffer >::update.

visibleMembers()

template <typename TSubmissionMode>
std::span< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::visibleMembers (const ViewportHandle viewportHandle)
inline

Returns visible member contexts for one viewport.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Parameters
viewportHandle

Viewport to query.

Definition at line 218 of file SceneMemberVisibilityRegistry.ixx.

218 [[nodiscard]] std::span<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>> visibleMembers(const ViewportHandle viewportHandle) {
219 const auto idx = viewportHandle.entityId;
220
221 if constexpr (std::is_same_v<TSubmissionMode, NonInstanced>) {
222 if (idx >= visibilityContextsNonInstanced_.size()) {
223 return {};
224 }
225 return visibilityContextsNonInstanced_[idx];
226 } else if constexpr (std::is_same_v<TSubmissionMode, Instanced>) {
227 if (idx >= visibilityContextsInstanced_.size()) {
228 return {};
229 }
230 return visibilityContextsInstanced_[idx];
231 } else {
232 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
233 }
234 return {};
235 }

Reference helios::engine::scene::registerComponents.

visibleMembers()

template <typename TSubmissionMode>
std::span< std::vector< SceneMemberVisibilityContext< TMemberHandle, TSubmissionMode > > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::visibleMembers ()
inline

Returns visible member context buckets for all viewports.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Definition at line 242 of file SceneMemberVisibilityRegistry.ixx.

242 [[nodiscard]] std::span<std::vector<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>>> visibleMembers() {
243 if constexpr (std::is_same_v<TSubmissionMode, NonInstanced>) {
244 return visibilityContextsNonInstanced_;
245 } else if constexpr (std::is_same_v<TSubmissionMode, Instanced>) {
246 return visibilityContextsInstanced_;
247 } else {
248 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
249 }
250 return {};
251 }

Reference helios::engine::scene::registerComponents.

Private Member Attributes

culledContextsInstanced_

template <typename TMemberHandle>
std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, Instanced> > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::culledContextsInstanced_

Definition at line 59 of file SceneMemberVisibilityRegistry.ixx.

59 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, Instanced>>> culledContextsInstanced_;

culledContextsNonInstanced_

template <typename TMemberHandle>
std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, NonInstanced> > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::culledContextsNonInstanced_

Definition at line 62 of file SceneMemberVisibilityRegistry.ixx.

62 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, NonInstanced>>> culledContextsNonInstanced_;

renderTargetViewportSceneKeys_

template <typename TMemberHandle>
std::vector<RenderTargetViewportSceneKey> helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::renderTargetViewportSceneKeys_

Definition at line 56 of file SceneMemberVisibilityRegistry.ixx.

56 std::vector<RenderTargetViewportSceneKey> renderTargetViewportSceneKeys_;

sceneRenderContexts_

template <typename TMemberHandle>
std::vector<SceneRenderContext<TMemberHandle> > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::sceneRenderContexts_

Definition at line 64 of file SceneMemberVisibilityRegistry.ixx.

64 std::vector<SceneRenderContext<TMemberHandle>> sceneRenderContexts_;

visibilityContextsInstanced_

template <typename TMemberHandle>
std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, Instanced> > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::visibilityContextsInstanced_

Definition at line 58 of file SceneMemberVisibilityRegistry.ixx.

58 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, Instanced>>> visibilityContextsInstanced_;

visibilityContextsNonInstanced_

template <typename TMemberHandle>
std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, NonInstanced> > > helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::visibilityContextsNonInstanced_

Definition at line 61 of file SceneMemberVisibilityRegistry.ixx.

61 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, NonInstanced>>> visibilityContextsNonInstanced_;

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


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.