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 172 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 180 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 194 of file SceneMemberVisibilitySystem.ixx.

195
196 visibilityRegistry_.clear();
197
203 >().withActive()) {
204
205 const auto sceneHandle = sbc->targetHandle();
206 const auto cameraHandle = cbc->targetHandle();
207
209 if (!camera) {
210 assert(false && "Camera not found");
211 logger_.error("Camera not found");
212 continue;
213 }
215 if (!pmc) {
216 assert(pmc && "Camera had no ProjectionMatrixComponent");
217 logger_.error("Camera had no ProjectionMatrixComponent");
218 continue;
219 }
221 if (!lac) {
222 assert(lac && "Camera had no ViewMatrixComponent");
223 logger_.error("Camera had no ViewMatrixComponent");
224 continue;
225 }
226
228 auto frustumPlanes = helios::math::frustumPlanes(
229 pcc->fovY(), pcc->aspectRatio(), pcc->zNear(), pcc->zFar(), lac->value()
230 );
231
232 auto cullingContext = CullingContext<TMemberHandle>{frustumPlanes, pmc->value(), lac->value()};
233
238 }
239
240 }

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,
133 ] : updateContext.view<
139 >().withActive()) {
140
141 cullingContext.bounds = boundsWorld->value();
142 cullingContext.handle = memberEntity.handle();
143
145 memberEntity.handle(),
146 renderTargetBindingComponent.targetHandle(),
147 viewportEntity.handle(),
148 sceneHandle,
149 transformWorld->value()
150 };
151
152 visibilityRegistry_.addSceneRenderContext({
153 renderTargetBindingComponent.targetHandle(), viewportEntity.handle(), sceneHandle
154 });
155
156
157 if (smc->targetHandle() == sceneHandle && cullingStrategy_.shouldRender(cullingContext)) {
158 visibilityRegistry_.template addVisibleMember<TSubmissionMode>(viewportEntity.handle(), std::move(memberContext));
159 } else {
160 visibilityRegistry_.template addCulledMember<TSubmissionMode>(viewportEntity.handle(), std::move(memberContext));
161 }
162 }
163 }

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.