Files
HelloVulkan/Engine/include/Engine/ECS/Entity.h
T
atdunbg 8afdd9b245 feat: 引入 RenderGraph、Application 框架、ECS 与资产句柄系统
架构分层(自上而下):
  App(SandboxApp) → Application(生命周期+事件) → Scene(ECS) / AssetManager(句柄) → Renderer → RenderGraph → Vulkan 模块

- RenderGraph:声明式帧图。虚拟资源+生成号句柄、死 pass 剔除、
  拓扑排序、资源生命周期、barrier 编译期预算(Synchronization2)、
  物理镜像池按帧槽位隔离(帧间竞争从根上消除)
- 帧同步修复:per-frame-slot 命令缓冲与 UBO ring(原先单份存在
  数据竞争);统一 kMaxFramesInFlight / FrameContext
- Application:生命周期钩子(OnInit/OnUpdate/OnRender/OnShutdown)
  + 事件系统(GLFW 回调 → POD 事件 → 类型化钩子);main 只 new 派生类
- ECS:自研稀疏集 Registry(Entity=(index,generation) 防悬空,
  O(1) 增删查,Each 取最小池遍历);Scene 延迟销毁队列;
  IdComponent{UUID} 稳定外部身份
- Assets:AssetManager + AssetHandle。组件存句柄不存裸指针/Ref
  (单一所有者 + 多使用者),Renderer 删除 LoadModel 改为纯消费
- 修复退出析构:成员析构前 GPU waitIdle(资产层先于 Renderer
  析构导致 VUID-00922 资源销毁时仍在使用)
- 引入 entt 子模块备用

validation 全程零错误零警告(RTX 5060 实测)
2026-09-22 13:46:05 +08:00

33 lines
925 B
C++

//
// Created by atdunbg on 2026/9/22.
//
// Entity:实体句柄 = (池内索引, 生成号)。
//
// 生成号用于甄别悬空引用:实体销毁后索引会回收复用,
// 旧的 Entity 句柄因 generation 不匹配会被 Registry 拒绝,
// 从机制上杜绝"引用到复用后的错误实体"这类隐式 bug。
//
#ifndef HELLOVULKAN_ENTITY_H
#define HELLOVULKAN_ENTITY_H
#include <Engine/Core/Types.h>
namespace Engine {
struct Entity {
static constexpr u32 kInvalid = 0xFFFFFFFF;
u32 index = kInvalid; // 实体槽位索引
u32 generation = 0; // 槽位复用计数
bool Valid() const { return index != kInvalid; }
explicit operator bool() const { return Valid(); }
bool operator==(const Entity& o) const = default;
bool operator!=(const Entity& o) const = default;
};
} // namespace Engine
#endif //HELLOVULKAN_ENTITY_H