refactor: 解耦重构——还清四处架构债(对齐 UE/Unity 分层)
- SceneRenderer:场景→渲染数据翻译层(UE FSceneRenderer / Unity CullingResults
模式),收口相机/灯光/光空间矩阵/双视图剔除,Renderer 只编排
- pass 对象化(Unity ScriptableRenderPass 模式):8 个 pass lambda 拆为
Passes::{Shadow,Forward,Bloom,Tonemap,ImGui,Present},BuildGraph 超级函数消失;
SceneGpu/FullscreenGpu 承接共享装配
- 中性 AssetRef(Core 层):ECS 组件不再依赖 Assets 模块(Unity InstanceID 思路)
- IAssetUploader 接口:AssetManager 不感知 Vulkan 具体类,上传服务由渲染层
VulkanAssetUploader 提供
- Renderer 公共 API 不变(App 层零改动),编译零错误 validation 零警告
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
//
|
||||
// Created by atdunbg on 2026/9/23.
|
||||
//
|
||||
// AssetRef:中性资产引用 = (池内索引, 生成号),与 Entity/RG 句柄同一哲学。
|
||||
//
|
||||
// 放在 Core 层(不依赖 Assets/Vulkan):ECS 组件、序列化数据只存这个
|
||||
// 纯值类型。对齐 UE/Unity 的做法——组件持有"资产引用",但不感知资产
|
||||
// 系统内部:Unity 的 InstanceID、UE 的 FSoftObjectPath 本质都是中性引用
|
||||
// 值,解析归资产系统(AssetManager)。
|
||||
// 悬空引用(generation 不匹配)由 AssetCache::Get 显式拒绝。
|
||||
//
|
||||
|
||||
#ifndef HELLOVULKAN_ASSETREF_H
|
||||
#define HELLOVULKAN_ASSETREF_H
|
||||
|
||||
#include <Engine/Core/Types.h>
|
||||
|
||||
// 资产类型前向声明(必须放全局层:namespace 内前向声明会创建
|
||||
// Engine::Assets::Engine::Model 这类错误嵌套命名空间)
|
||||
namespace Engine {
|
||||
class Model;
|
||||
class Texture;
|
||||
class Material;
|
||||
}
|
||||
|
||||
namespace Engine {
|
||||
|
||||
inline constexpr u32 kInvalidAssetIndex = 0xFFFFFFFF;
|
||||
|
||||
template<typename T>
|
||||
struct AssetRef {
|
||||
u32 index = kInvalidAssetIndex;
|
||||
u32 generation = 0;
|
||||
|
||||
bool Valid() const { return index != kInvalidAssetIndex; }
|
||||
explicit operator bool() const { return Valid(); }
|
||||
bool operator==(const AssetRef& o) const = default;
|
||||
};
|
||||
|
||||
// 常用别名(新增资产类型时在这里加一行)
|
||||
using ModelRef = AssetRef<Model>;
|
||||
|
||||
} // namespace Engine
|
||||
|
||||
#endif //HELLOVULKAN_ASSETREF_H
|
||||
Reference in New Issue
Block a user