29 lines
1.8 KiB
C++
29 lines
1.8 KiB
C++
#pragma once
|
|
#include "renderable.hpp"
|
|
namespace aethera {
|
|
/* Scene 状态标签,用于访问和订阅 Scene::State。 */
|
|
/*
|
|
* Scene 只汇总跨渲染后端共有的 Prepare 数据依赖图并构建 Taskflow。
|
|
* 用户最终通过 Impl<Scene> 创建可使用实例;编辑 Dependency_Graph 后调用 advance() 提交结构变化,再调用 process(...) 执行当前场景。
|
|
*/
|
|
struct Scene : Def<Scene, Root, Dependency_Graph_Type<Prepare_Data_Tag, Renderable>> {
|
|
/* Scene 当前没有额外发布属性;派生定义可在自己的 Prop 中继续追加字段。 */
|
|
struct Prop : Prev_Prop {};
|
|
/* Scene 每次 process(...) 后发布的总图结构与执行统计。 */
|
|
struct State : Prev_State {
|
|
bool taskflow_rebuilt{}; /* 本次 process(...) 前的 advance 是否重新构建了总 Taskflow。 */
|
|
std::size_t renderable_count{}; /* Prepare 数据依赖图中的 Renderable 数量。 */
|
|
std::size_t taskflow_task_count{}; /* 当前 Prepare Taskflow 中的任务节点数量。 */
|
|
std::size_t taskflow_dependency_count{}; /* 当前 Prepare Taskflow 中的直接依赖边数量。 */
|
|
std::size_t taskflow_max_predecessors{}; /* 当前 Prepare Taskflow 中单个任务的最大直接前驱数量。 */
|
|
std::size_t taskflow_max_successors{}; /* 当前 Prepare Taskflow 中单个任务的最大直接后继数量。 */
|
|
std::uint64_t taskflow_execution_time_ns{}; /* 本次 process(...) 执行 Prepare Taskflow 的耗时,单位为纳秒;没有任务时为 0。 */
|
|
/* 支持测试、快照比较和变更检测的逐字段相等比较。 */
|
|
bool operator==(const State&) const = default;
|
|
};
|
|
/* 完整声明、字段及可覆盖 CRTP hook 见 scene.ipp 中的 Scene::Private。 */
|
|
struct Private;
|
|
};
|
|
}
|
|
#include "scene.ipp"
|