Skip to main content

SceneRenderSystem Class Template

System that dispatches render commands from visibility results. More...

Declaration

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

Public Member Typedefs Index

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

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 (SceneMemberVisibilityRegistry< TMemberHandle > &visibilityRegistry)

Constructs the system with the visibility snapshot registry. More...

Public Member Functions Index

template < ... >
voidupdate (UpdateContext &updateContext, TCommandBuffer &cmdBuffer) noexcept

Dispatches render commands from the current visibility snapshot. More...

Private Member Functions Index

template < ... >
voiddispatchNonInstancedRenderCommands (UpdateContext &updateContext, std::span< const std::vector< SceneMemberVisibilityContext< TMemberHandle, NonInstanced > > > visibilityContexts, TCommandBuffer &cmdBuffer)

Dispatches non-instanced member render commands. More...

template < ... >
voiddispatchInstancedRenderCommands (UpdateContext &updateContext, std::span< const std::vector< SceneMemberVisibilityContext< TMemberHandle, Instanced > > > visibilityContexts, TCommandBuffer &cmdBuffer)

Dispatches instanced member render commands in batches. More...

Private Member Attributes Index

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

Central per-frame visibility snapshot consumed by this system. More...

Private Static Attributes Index

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

Description

System that dispatches render commands from visibility results.

This system consumes the frame-local SceneMemberVisibilityRegistry produced earlier by SceneMemberVisibilitySystem. It emits scene-level render commands and member-level commands for both instanced and non-instanced submission paths.

Template Parameters
TOwnerHandle

Viewport entity handle type.

TMemberHandle

Scene member handle type.

TCommandBuffer

Command buffer used for extracted render commands.

Definition at line 94 of file SceneRenderSystem.ixx.

Public Member Typedefs

CommandBuffer_type

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

Command buffer type used by this extraction system.

Definition at line 233 of file SceneRenderSystem.ixx.

EngineRoleTag

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

Runtime role tag used for engine system registration.

Definition at line 228 of file SceneRenderSystem.ixx.

Public Constructors

SceneRenderSystem()

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

Constructs the system with the visibility snapshot registry.

Parameters
visibilityRegistry

Registry containing per-frame visible/culled members.

Definition at line 240 of file SceneRenderSystem.ixx.

Public Member Functions

update()

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

Dispatches render commands from the current visibility snapshot.

Emits one RenderSceneCommand per scene/render-target/viewport context, then emits member commands for instanced and non-instanced visible members stored in SceneMemberVisibilityRegistry.

Parameters
updateContext

Current frame update context.

cmdBuffer

Command buffer receiving extracted render commands.

Definition at line 254 of file SceneRenderSystem.ixx.

255
256 auto sceneRenderContexts = visibilityRegistry_.sceneRenderContexts();
257
258 for (auto& sceneRenderContext : sceneRenderContexts) {
259 cmdBuffer.template add<RenderSceneCommand<TMemberHandle>>(sceneRenderContext);
260 }
261
262 const auto instancedMembers = visibilityRegistry_.template visibleMembers<Instanced>();
263 dispatchInstancedRenderCommands(updateContext, instancedMembers, cmdBuffer);
264
265 const auto nonInstancedMembers = visibilityRegistry_.template visibleMembers<NonInstanced>();
266 dispatchNonInstancedRenderCommands(updateContext, nonInstancedMembers, cmdBuffer);
267
268
269 }

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

Private Member Functions

dispatchInstancedRenderCommands()

template <typename TOwnerHandle, typename TMemberHandle, typename TCommandBuffer = NullCommandBuffer>
void helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCommandBuffer >::dispatchInstancedRenderCommands (UpdateContext & updateContext, std::span< const std::vector< SceneMemberVisibilityContext< TMemberHandle, Instanced > > > visibilityContexts, TCommandBuffer & cmdBuffer)
inline

Dispatches instanced member render commands in batches.

Builds InstanceRenderBatchContext groups with matching render state and emits RenderInstanceBatchCommand whenever a batch boundary is hit.

Parameters
updateContext

Current frame update context.

visibilityContexts

Visible instanced members grouped by viewport.

cmdBuffer

Command buffer receiving render commands.

Definition at line 160 of file SceneRenderSystem.ixx.

160 void dispatchInstancedRenderCommands(
164
165 std::optional<InstanceRenderBatchContext<TMemberHandle>> renderBatchContext;
166
167 auto flushCurrentBatch = [&]() {
168 if (!renderBatchContext || renderBatchContext->memberHandles.empty()) {
169 renderBatchContext.reset();
170 return;
171 }
172
174 std::move(*renderBatchContext)
175 );
176
177 renderBatchContext.reset();
178 };
179
180 for (const auto& viewportContexts : visibilityContexts) {
181
182 for (const auto& memberContext : viewportContexts) {
183 const auto sceneHandle = memberContext.sceneHandle;
184 const auto renderTargetHandle = memberContext.renderTargetHandle;
185 const auto viewportHandle = memberContext.viewportHandle;
186
187 const auto entity = updateContext.find<TMemberHandle>(memberContext.memberHandle);
188 assert(entity && "Unexpected missing entity");
189
191 assert(renderPrototype && "Unexpected missing RenderPrototypeComponent");
192
193 if (!renderBatchContext ||
194 memberContext.renderTargetHandle != renderBatchContext->renderTargetHandle ||
195 memberContext.viewportHandle != renderBatchContext->viewportHandle ||
196 sceneHandle != renderBatchContext->sceneHandle ||
197 renderPrototype->meshHandle() != renderBatchContext->meshHandle ||
198 renderPrototype->materialHandle() != renderBatchContext->materialHandle ||
199 renderPrototype->shaderHandle() != renderBatchContext->shaderHandle) {
200
202
203 renderBatchContext.emplace(
204 memberContext.renderTargetHandle,
205 viewportHandle,
206 sceneHandle,
207 renderPrototype->meshHandle(),
208 renderPrototype->materialHandle(),
209 renderPrototype->shaderHandle()
210 );
211 }
212
213 renderBatchContext->memberHandles.push_back(memberContext.memberHandle);
214 renderBatchContext->instanceData.push_back({memberContext.worldMatrix});
215 }
216 }
217
219 }

dispatchNonInstancedRenderCommands()

template <typename TOwnerHandle, typename TMemberHandle, typename TCommandBuffer = NullCommandBuffer>
void helios::engine::scene::systems::SceneRenderSystem< TOwnerHandle, TMemberHandle, TCommandBuffer >::dispatchNonInstancedRenderCommands (UpdateContext & updateContext, std::span< const std::vector< SceneMemberVisibilityContext< TMemberHandle, NonInstanced > > > visibilityContexts, TCommandBuffer & cmdBuffer)
inline

Dispatches non-instanced member render commands.

Iterates visible non-instanced member contexts and emits one RenderSceneMemberCommand per member.

Parameters
updateContext

Current frame update context.

visibilityContexts

Visible non-instanced members grouped by viewport.

cmdBuffer

Command buffer receiving render commands.

Definition at line 116 of file SceneRenderSystem.ixx.

116 void dispatchNonInstancedRenderCommands(
120
121
122 for (const auto& viewportContexts : visibilityContexts) {
123
124 for (const auto& memberContext : viewportContexts) {
125 const auto sceneHandle = memberContext.sceneHandle;
126 const auto renderTargetHandle = memberContext.renderTargetHandle;
127 const auto viewportHandle = memberContext.viewportHandle;
128
129 const auto entity = updateContext.find<TMemberHandle>(memberContext.memberHandle);
130 assert(entity && "Unexpected missing entity");
131
133 assert(renderPrototype && "Unexpected missing RenderPrototypeComponent");
134
137 renderTargetHandle,
138 viewportHandle,
139 sceneHandle,
140 renderPrototype->meshHandle(),
141 renderPrototype->materialHandle(),
142 renderPrototype->shaderHandle(),
143 memberContext.worldMatrix
144 });
145 }
146 }
147 }

Private Member Attributes

visibilityRegistry_

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

Central per-frame visibility snapshot consumed by this system.

Filled by SceneMemberVisibilitySystem and read-only in this stage.

Definition at line 103 of file SceneRenderSystem.ixx.

Private Static Attributes

logger_

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

Definition at line 96 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.