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 46 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 73 of file SceneMemberVisibilityRegistry.ixx.

74 visibilityContextsInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
75 for (auto& vec : visibilityContextsInstanced_) {
77 }
78 culledContextsInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
79 for (auto& vec : culledContextsInstanced_) {
81 }
82 visibilityContextsNonInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
83 for (auto& vec : visibilityContextsNonInstanced_) {
85 }
86 culledContextsNonInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
87 for (auto& vec : culledContextsNonInstanced_) {
89 }
90
91 sceneRenderContexts_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
92 }

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 126 of file SceneMemberVisibilityRegistry.ixx.

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

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 99 of file SceneMemberVisibilityRegistry.ixx.

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

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 151 of file SceneMemberVisibilityRegistry.ixx.

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

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 257 of file SceneMemberVisibilityRegistry.ixx.

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

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 179 of file SceneMemberVisibilityRegistry.ixx.

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

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 202 of file SceneMemberVisibilityRegistry.ixx.

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

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 113 of file SceneMemberVisibilityRegistry.ixx.

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

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 219 of file SceneMemberVisibilityRegistry.ixx.

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

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 243 of file SceneMemberVisibilityRegistry.ixx.

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

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 60 of file SceneMemberVisibilityRegistry.ixx.

60 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 63 of file SceneMemberVisibilityRegistry.ixx.

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

renderTargetViewportSceneKeys_

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

Definition at line 57 of file SceneMemberVisibilityRegistry.ixx.

57 std::vector<RenderTargetViewportSceneKey> renderTargetViewportSceneKeys_;

sceneRenderContexts_

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

Definition at line 65 of file SceneMemberVisibilityRegistry.ixx.

65 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 59 of file SceneMemberVisibilityRegistry.ixx.

59 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 62 of file SceneMemberVisibilityRegistry.ixx.

62 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.