SceneMemberVisibilityRegistry.ixx File
Registry for visible and culled scene members grouped by viewport and submission mode. More...
Included Headers
#include "helios-engine-config.h"
#include <span>
#include <cstdint>
#include <vector>
#include <helios.engine.rendering.renderTarget.types>
#include <helios.engine.rendering.viewport.types>
#include <helios.engine.rendering.common.types>
#include <helios.engine.scene.types>
#include <helios.engine.core.container.HandleManyToManyMap>
Namespaces Index
| namespace | helios |
| namespace | engine |
| namespace | scene |
Classes Index
| class | SceneMemberVisibilityRegistry<TMemberHandle> |
|
Stores per-viewport visibility/culling results for scene members. More... | |
| struct | RenderTargetViewportSceneKey |
Description
Registry for visible and culled scene members grouped by viewport and submission mode.
File Listing
The file content with the documentation metadata removed is:
7#include "helios-engine-config.h"
22using namespace helios::engine::rendering::viewport::types;
23using namespace helios::engine::rendering::common::types;
24using namespace helios::engine::scene::types;
25using namespace helios::engine::rendering::common::types;
26using namespace helios::engine::rendering::renderTarget::types;
27using namespace helios::engine::core::container;
34export namespace helios::engine::scene {
46 class SceneMemberVisibilityRegistry {
54 friend bool operator==(const RenderTargetViewportSceneKey&, const RenderTargetViewportSceneKey&) = default;
59 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, Instanced>>> visibilityContextsInstanced_;
60 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, Instanced>>> culledContextsInstanced_;
62 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, NonInstanced>>> visibilityContextsNonInstanced_;
63 std::vector<std::vector<SceneMemberVisibilityContext<TMemberHandle, NonInstanced>>> culledContextsNonInstanced_;
74 visibilityContextsInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
75 for (auto& vec : visibilityContextsInstanced_) {
76 vec.reserve(HELIOS_DEFAULT_VISIBLE_MEMBER_CAPACITY);
78 culledContextsInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
79 for (auto& vec : culledContextsInstanced_) {
80 vec.reserve(HELIOS_DEFAULT_VISIBLE_MEMBER_CAPACITY);
82 visibilityContextsNonInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
83 for (auto& vec : visibilityContextsNonInstanced_) {
84 vec.reserve(HELIOS_DEFAULT_VISIBLE_MEMBER_CAPACITY);
86 culledContextsNonInstanced_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
87 for (auto& vec : culledContextsNonInstanced_) {
88 vec.reserve(HELIOS_DEFAULT_VISIBLE_MEMBER_CAPACITY);
91 sceneRenderContexts_.reserve(DEFAULT_VIEWPORT_POOL_CAPACITY);
101 for (const auto& existingContext : sceneRenderContexts_) {
102 if (existingContext == context) {
107 sceneRenderContexts_.push_back(std::move(context));
113 [[nodiscard]] std::span<const SceneRenderContext<TMemberHandle>> sceneRenderContexts() const noexcept {
126 void addCulledMember(const ViewportHandle viewportHandle, SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>&& context) {
127 const auto idx = viewportHandle.entityId;
129 if (culledContextsNonInstanced_.size() <= idx) {
130 culledContextsNonInstanced_.resize(idx + 1);
134 if (culledContextsInstanced_.size() <= idx) {
135 culledContextsInstanced_.resize(idx + 1);
151 void addVisibleMember(const ViewportHandle viewportHandle, SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>&& context) {
153 const auto idx = viewportHandle.entityId;
156 if (visibilityContextsInstanced_.size() <= idx) {
157 visibilityContextsInstanced_.resize(idx + 1);
162 if (visibilityContextsNonInstanced_.size() <= idx) {
163 visibilityContextsNonInstanced_.resize(idx + 1);
168 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
179 [[nodiscard]] std::span<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>> culledMembers(const ViewportHandle viewportHandle = {}) {
180 const auto idx = viewportHandle.entityId;
182 if (idx >= culledContextsNonInstanced_.size()) {
185 return culledContextsNonInstanced_[idx];
187 if (idx >= culledContextsInstanced_.size()) {
190 return culledContextsInstanced_[idx];
192 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
202 [[nodiscard]] std::span<std::vector<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>>> culledMembers() const {
208 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
219 [[nodiscard]] std::span<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>> visibleMembers(const ViewportHandle viewportHandle) {
220 const auto idx = viewportHandle.entityId;
223 if (idx >= visibilityContextsNonInstanced_.size()) {
226 return visibilityContextsNonInstanced_[idx];
228 if (idx >= visibilityContextsInstanced_.size()) {
231 return visibilityContextsInstanced_[idx];
233 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
243 [[nodiscard]] std::span<std::vector<SceneMemberVisibilityContext<TMemberHandle, TSubmissionMode>>> visibleMembers() {
249 static_assert(always_false_v<TSubmissionMode>, "Unsupported submission mode");
259 for (auto& vec : visibilityContextsInstanced_) {
260 vec.clear();
262 for (auto& vec : visibilityContextsNonInstanced_) {
263 vec.clear();
265 for (auto& vec : culledContextsInstanced_) {
266 vec.clear();
268 for (auto& vec : culledContextsNonInstanced_) {
269 vec.clear();
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.