Skip to main content

SceneMemberVisibilitySystem Class Template

Computes visibility for scene members and stores the frame snapshot. More...

Declaration

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes> class helios::engine::scene::systems::SceneMemberVisibilitySystem<TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes> { ... }

Public Member Typedefs Index

template < ... >
usingEngineRoleTag = helios::engine::runtime::world::tags::TypedSystemRole

Runtime role tag used for engine system registration. More...

Public Constructors Index

template < ... >
SceneMemberVisibilitySystem (TCullingStrategy cullingStrategy, SceneMemberVisibilityRegistry< TMemberHandle > &visibilityRegistry)

Creates the visibility system with strategy and output registry. More...

Public Member Functions Index

template < ... >
voidupdate (UpdateContext &updateContext) noexcept

Rebuilds the visibility registry for the current frame. More...

Private Member Functions Index

template <typename TSubmissionMode>
voidprocessMembers (UpdateContext &updateContext, CullingContext< TMemberHandle > &cullingContext, const SceneHandle sceneHandle, const RenderTargetBindingComponent< TOwnerHandle > &renderTargetBindingComponent, const ViewportEntity &viewportEntity)

Evaluates all members for one submission mode and one viewport. More...

Private Member Attributes Index

template < ... >
TCullingStrategycullingStrategy_

Culling strategy used to decide member visibility per viewport. More...

template < ... >
SceneMemberVisibilityRegistry< TMemberHandle > &visibilityRegistry_

Tracks visible and culled members per viewport for diagnostics/debugging. More...

Private Static Attributes Index

template < ... >
static auto &logger_ = helios::engine::util::log::LogManager::loggerForScope(HELIOS_LOG_SCOPE)

Description

Computes visibility for scene members and stores the frame snapshot.

This system is responsible for filling SceneMemberVisibilityRegistry once per frame. The resulting visible/culled member lists are consumed by subsequent rendering steps (for example by scene render submission).

Template Parameters
TOwnerHandle

Viewport owner handle type.

TMemberHandle

Scene member handle type.

TCullingStrategy

Strategy used to decide member visibility.

TRenderModes

Reserved render mode parameter pack.

Definition at line 91 of file SceneMemberVisibilitySystem.ixx.

Public Member Typedefs

EngineRoleTag

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes>
using helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::EngineRoleTag = helios::engine::runtime::world::tags::TypedSystemRole

Runtime role tag used for engine system registration.

Definition at line 174 of file SceneMemberVisibilitySystem.ixx.

Public Constructors

SceneMemberVisibilitySystem()

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes>
helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::SceneMemberVisibilitySystem (TCullingStrategy cullingStrategy, SceneMemberVisibilityRegistry< TMemberHandle > & visibilityRegistry)
inline explicit

Creates the visibility system with strategy and output registry.

Parameters
cullingStrategy

Culling strategy instance.

visibilityRegistry

Registry receiving per-frame visibility results.

Definition at line 182 of file SceneMemberVisibilitySystem.ixx.

Public Member Functions

update()

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes>
void helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::update (UpdateContext & updateContext)
inline noexcept

Rebuilds the visibility registry for the current frame.

The registry is cleared first, then all active viewport bindings are traversed. For each viewport, members are tested and classified into visible/culled buckets per submission mode.

Parameters
updateContext

ECS/world update context.

Definition at line 196 of file SceneMemberVisibilitySystem.ixx.

197
198 visibilityRegistry_.clear();
199
206 >().whereEnabled()) {
207
208 const auto sceneHandle = sbc->targetHandle();
209 const auto cameraHandle = cbc->targetHandle();
210
212 if (!camera) {
213 assert(false && "Camera not found");
214 logger_.error("Camera not found");
215 continue;
216 }
218 if (!pmc) {
219 assert(pmc && "Camera had no ProjectionMatrixComponent");
220 logger_.error("Camera had no ProjectionMatrixComponent");
221 continue;
222 }
224 if (!lac) {
225 assert(lac && "Camera had no ViewMatrixComponent");
226 logger_.error("Camera had no ViewMatrixComponent");
227 continue;
228 }
229
231 auto frustumPlanes = helios::math::frustumPlanes(
232 pcc->fovY(), pcc->aspectRatio(), pcc->zNear(), pcc->zFar(), lac->value()
233 );
234
235 auto cullingContext = CullingContext<TMemberHandle>{frustumPlanes, pmc->value(), lac->value()};
236
241 }
242
243 }

References helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::clear and helios::engine::scene::registerComponents.

Private Member Functions

processMembers()

template <typename TSubmissionMode>
void helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::processMembers (UpdateContext & updateContext, CullingContext< TMemberHandle > & cullingContext, const SceneHandle sceneHandle, const RenderTargetBindingComponent< TOwnerHandle > & renderTargetBindingComponent, const ViewportEntity & viewportEntity)
inline

Evaluates all members for one submission mode and one viewport.

Appends each member to the visibility registry as either visible or culled.

Template Parameters
TSubmissionMode

Submission mode (Instanced or NonInstanced).

Parameters
updateContext

ECS/world update context.

cullingContext

Reusable culling context used per member.

sceneHandle

Scene currently bound to the viewport.

renderTargetBindingComponent

Render target bound to the viewport.

viewportEntity

Viewport entity being processed.

Definition at line 119 of file SceneMemberVisibilitySystem.ixx.

119 void processMembers(
122 const SceneHandle sceneHandle,
125 ) {
126
127 for (auto [
129 smc,
130 rpc,
134 ] : updateContext.view<
141 >().whereEnabled()) {
142
143 cullingContext.bounds = boundsWorld->value();
144 cullingContext.handle = memberEntity.handle();
145
147 memberEntity.handle(),
148 renderTargetBindingComponent.targetHandle(),
149 viewportEntity.handle(),
150 sceneHandle,
151 transformWorld->value()
152 };
153
154 visibilityRegistry_.addSceneRenderContext({
155 renderTargetBindingComponent.targetHandle(), viewportEntity.handle(), sceneHandle
156 });
157
158
159 if (smc->targetHandle() == sceneHandle && cullingStrategy_.shouldRender(cullingContext)) {
160 visibilityRegistry_.template addVisibleMember<TSubmissionMode>(viewportEntity.handle(), std::move(memberContext));
161 } else {
162 visibilityRegistry_.template addCulledMember<TSubmissionMode>(viewportEntity.handle(), std::move(memberContext));
163 }
164 }
165 }

Private Member Attributes

cullingStrategy_

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes>
TCullingStrategy helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::cullingStrategy_

Culling strategy used to decide member visibility per viewport.

Definition at line 96 of file SceneMemberVisibilitySystem.ixx.

96 TCullingStrategy cullingStrategy_;

visibilityRegistry_

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes>
SceneMemberVisibilityRegistry<TMemberHandle>& helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::visibilityRegistry_

Tracks visible and culled members per viewport for diagnostics/debugging.

Definition at line 103 of file SceneMemberVisibilitySystem.ixx.

Private Static Attributes

logger_

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename ... TRenderModes>
auto& helios::engine::scene::systems::SceneMemberVisibilitySystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TRenderModes >::logger_ = helios::engine::util::log::LogManager::loggerForScope(HELIOS_LOG_SCOPE)
static

Definition at line 98 of file SceneMemberVisibilitySystem.ixx.


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


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.