Skip to main content

SceneRenderSystem Class Template

System that extracts per-member render contexts for active viewports. More...

Declaration

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer> class helios::engine::scene::systems::SceneRenderSystem<TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer> { ... }

Public Member Typedefs Index

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

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

template < ... >
usingCommandBuffer_type = TCommandBuffer

Command buffer type used by this extraction system. More...

Public Constructors Index

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

Constructs the system with a culling strategy instance. More...

Public Member Functions Index

template < ... >
voidupdate (helios::engine::runtime::world::UpdateContext &updateContext, TCommandBuffer &cmdBuffer) noexcept

Extracts render commands for active viewports. More...

Private Member Attributes Index

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

Private Static Attributes Index

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

Description

System that extracts per-member render contexts for active viewports.

For each active viewport binding, the system resolves the bound scene and camera, evaluates the configured culling strategy for scene members, and writes accepted members as RenderSceneMemberCommands into the target command buffer.

Template Parameters
TOwnerHandle

Viewport entity handle type.

TMemberHandle

Scene member handle type.

TCullingStrategy

Frustum-culling strategy type.

TCommandBuffer

Command buffer used for extracted render commands.

Definition at line 83 of file SceneRenderSystem.ixx.

Public Member Typedefs

CommandBuffer_type

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer>
using helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer >::CommandBuffer_type = TCommandBuffer

Command buffer type used by this extraction system.

Definition at line 96 of file SceneRenderSystem.ixx.

EngineRoleTag

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer>
using helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer >::EngineRoleTag = helios::engine::runtime::world::tags::SystemRole

Runtime role tag used for engine system registration.

Definition at line 93 of file SceneRenderSystem.ixx.

Public Constructors

SceneRenderSystem()

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer>
helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer >::SceneRenderSystem (TCullingStrategy cullingStrategy, SceneMemberVisibilityRegistry< TMemberHandle > & visibilityRegistry)
inline explicit

Constructs the system with a culling strategy instance.

Parameters
cullingStrategy

Strategy used to decide whether a scene member should produce render work.

visibilityRegistry

Registry for tracking culled and visible handles per viewport.

Definition at line 105 of file SceneRenderSystem.ixx.

Public Member Functions

update()

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer>
void helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer >::update (helios::engine::runtime::world::UpdateContext & updateContext, TCommandBuffer & cmdBuffer)
inline noexcept

Extracts render commands for active viewports.

Parameters
updateContext

Current frame update context.

cmdBuffer

Command buffer receiving extracted render commands.

Definition at line 114 of file SceneRenderSystem.ixx.

115
116
123 >().whereEnabled()) {
124
125 const auto sceneHandle = sbc->targetHandle();
126 const auto cameraHandle = cbc->targetHandle();
127
129 if (!camera) {
130 assert(false && "Camera not found");
131 logger_.error("Camera not found");
132 continue;
133 }
135 if (!pmc) {
136 assert(pmc && "Camera had no ProjectionMatrixComponent");
137 logger_.error("Camera had no ProjectionMatrixComponent");
138 continue;
139 }
141 if (!lac) {
142 assert(lac && "Camera had no ViewMatrixComponent");
143 logger_.error("Camera had no ViewMatrixComponent");
144 continue;
145 }
146
148 auto frustumPlanes = helios::math::frustumPlanes(
149 pcc->fovY(), pcc->aspectRatio(), pcc->zNear(), pcc->zFar(), lac->value()
150 );
151
152 auto cullingContext = CullingContext<TMemberHandle>{frustumPlanes, pmc->value(), lac->value()};
153
156 fbc->targetHandle(),
157 viewportEntity.handle(),
158 sceneHandle
159 });
160
161
162
163#if HELIOS_DEBUG
164 std::size_t available = 0;
165 std::size_t used = 0;
166#endif
167
168 for (auto [
170 smc,
171 rpc,
175 ] : updateContext.view<
182 >().whereEnabled()) {
183
185 cullingContext.handle = memberEntity.handle();
186
187#if HELIOS_DEBUG
188 available++;
189#endif
190 if (smc->targetHandle() == sceneHandle && cullingStrategy_.shouldRender(cullingContext)) {
191#if HELIOS_DEBUG
192 used++;
193#endif
194 std::ignore = visibilityRegistry_.addVisibleMember(viewportEntity.handle(), memberEntity.handle());
197 memberEntity.handle(),
198 fbc->targetHandle(),
199 viewportEntity.handle(),
200 sceneHandle,
201 rpc->meshHandle(),
202 rpc->materialHandle(),
203 rpc->shaderHandle(),
204 transformWorld->value()
205 });
206
207
208 } else {
209 std::ignore = visibilityRegistry_.addCulledMember(viewportEntity.handle(), memberEntity.handle());
210 }
211 }
212
213#if HELIOS_DEBUG
214 logger_.debug("Available {0}, culled in {1}, used {2} scene members for viewport {3}.", available, available - used, used, viewportEntity.handle().entityId);
215#endif
216
217 }
218
219 }

References helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addCulledMember, helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addVisibleMember, helios::engine::scene::types::CullingContext< TMemberHandle >::bounds, helios::engine::scene::types::SceneMemberRenderContext< TMemberHandle >::meshHandle and helios::engine::scene::registerComponents.

Private Member Attributes

cullingStrategy_

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer>
TCullingStrategy helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer >::cullingStrategy_

Definition at line 85 of file SceneRenderSystem.ixx.

85 TCullingStrategy cullingStrategy_;

visibilityRegistry_

template <typename TOwnerHandle, typename TMemberHandle, typename TCullingStrategy, typename TCommandBuffer = NullCommandBuffer>
SceneMemberVisibilityRegistry<TMemberHandle>& helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCullingStrategy, TCommandBuffer >::visibilityRegistry_

Definition at line 89 of file SceneRenderSystem.ixx.

Private Static Attributes

logger_

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

Definition at line 87 of file SceneRenderSystem.ixx.


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


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.