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=TCullingStrategy())

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_

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 79 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 91 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 88 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=TCullingStrategy())
inline explicit

Constructs the system with a culling strategy instance.

Parameters
cullingStrategy

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

Definition at line 99 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 108 of file SceneRenderSystem.ixx.

109
110
117 >().whereEnabled()) {
118
119 const auto sceneHandle = sbc->targetHandle();
120 const auto cameraHandle = cbc->targetHandle();
121
123 if (!camera) {
124 assert(false && "Camera not found");
125 logger_.error("Camera not found");
126 continue;
127 }
129 if (!pmc) {
130 assert(pmc && "Camera had no ProjectionMatrixComponent");
131 logger_.error("Camera had no ProjectionMatrixComponent");
132 continue;
133 }
135 if (!lac) {
136 assert(lac && "Camera had no ViewMatrixComponent");
137 logger_.error("Camera had no ViewMatrixComponent");
138 continue;
139 }
140
142 auto frustumPlanes = helios::math::frustumPlanes(
143 pcc->fovY(), pcc->aspectRatio(), pcc->zNear(), pcc->zFar(), lac->value()
144 );
145
146 auto cullingContext = CullingContext<TMemberHandle>{frustumPlanes, pmc->value(), lac->value()};
147
150 fbc->targetHandle(),
151 viewportEntity.handle(),
152 sceneHandle
153 });
154
155
156
157#if HELIOS_DEBUG
158 std::size_t available = 0;
159 std::size_t used = 0;
160#endif
161
162 for (auto [
164 smc,
165 rpc,
166 wmc,
167 wbc,
169 ] : updateContext.view<
176 >().whereEnabled()) {
177
178 cullingContext.bounds = wbc->value();
179 cullingContext.handle = memberEntity.handle();
180
181#if HELIOS_DEBUG
182 available++;
183#endif
184 if (smc->targetHandle() == sceneHandle && cullingStrategy_.shouldRender(cullingContext)) {
185#if HELIOS_DEBUG
186 used++;
187#endif
188
191 memberEntity.handle(),
192 fbc->targetHandle(),
193 viewportEntity.handle(),
194 sceneHandle,
195 rpc->meshHandle(),
196 rpc->materialHandle(),
197 rpc->shaderHandle(),
198 wmc->value()
199 });
200
201
202 }
203 }
204
205#if HELIOS_DEBUG
206 logger_.debug("Available {0}, culled in {1}, used {2} scene members for viewport {3}.", available, available - used, used, viewportEntity.handle().entityId);
207#endif
208
209 }
210
211 }

References 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 81 of file SceneRenderSystem.ixx.

81 TCullingStrategy cullingStrategy_;

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