- 资产浏览器可视化与配色:面板重构(网格/列表/缩略图)、AssetKind 分类、 EditorColors 统一配色、AssetItemView 抽出条目绘制;HierarchyPanel/ MaterialEditorPanel 同步调整 - 材质缩略图改走 GPU 回读烘焙:MaterialPreviewPass 新增 bake pass (SDR atlas → host staging copyImageToBuffer)、Renderer 提供 Request/PollMaterialPreviewBake(无 waitIdle,依赖 per-slot fence), Editor 每帧排空后注入 ThumbnailCache——脱离预览 tile 池,消除"滚出视野 即失效/池耗尽"两问题 - 缩略图失效:BakedIdentity(serial, editVersion) 与当前材质身份比对, 换贴图槽(重载新 serial)/调参数(editVersion++)不符即 Invalidate 重烘, 修"修改材质后资产浏览器缩略图不更新" - 材质加载闸门:每帧至多 1 个 + 按实测耗时冷却,替代固定 2/帧 - 纹理上传批式化:VulkanAssetUploader 新增路径纹理缓存(跨材质去重, 同一贴图只解码/上传一次)+ 同批新纹理合并为单 cmd/单 submit/单 fence; Texture 抽出 RecordPixelsUpload/CreateDeferred/ReleasePendingStaging, 析构兜底释放 staging;MaterialAsset 纹理所有权移交 uploader 缓存—— 修大材质目录首次打开卡顿
60 lines
2.3 KiB
C++
60 lines
2.3 KiB
C++
//
|
||
// AssetBrowserPanel:项目资产浏览器(Unity Project 窗口简化版)。
|
||
//
|
||
// 左侧目录树 + 右侧文件列表(类型过滤 + 名字过滤)。与 AssetManager
|
||
// 的集成点是"双击预热":model/HDR 进缓存去重(重复双击零成本),
|
||
// .scene 提示走 File 菜单(加载含环境恢复/选中清理等流程,不在面板
|
||
// 重复)。拖拽到视口/Inspector 属后续迭代。
|
||
//
|
||
// 目录每帧扫描:项目级目录条目有限(几十量级),filesystem 迭代开销
|
||
// 可忽略;资产规模上来后再加缓存脏标。
|
||
//
|
||
|
||
#ifndef HELLOVULKAN_ASSETBROWSERPANEL_H
|
||
#define HELLOVULKAN_ASSETBROWSERPANEL_H
|
||
|
||
#include "EditorContext.h"
|
||
|
||
#include <filesystem>
|
||
#include <string>
|
||
|
||
// Prefab 资产拖拽 payload(Content Browser 拖 .prefab → Outliner 落点
|
||
// 实例化;字符串 = 资产相对路径)。对齐 kMaterialDragPayload 模式:
|
||
// 常量住源面板头
|
||
inline constexpr const char* kPrefabDragPayload = "PREFAB_PATH";
|
||
|
||
// 模型资产拖拽 payload(Content Browser 拖 .glb/.fbx/... → Outliner
|
||
// 落点创建带 MeshRenderer 的实体;字符串 = 资产相对路径)
|
||
inline constexpr const char* kModelDragPayload = "MODEL_PATH";
|
||
|
||
class AssetBrowserPanel {
|
||
public:
|
||
void Draw(const EditorContext& ctx);
|
||
|
||
private:
|
||
// 视图模式:列表(行,含内联小缩略图)/ 网格(缩略图瓦片)
|
||
enum class ViewMode { List, Grid };
|
||
|
||
// 目录树节点(递归);右侧内容区画 dir 下的目录+文件
|
||
void DrawDirTree(const EditorContext& ctx,
|
||
const std::filesystem::path& dir);
|
||
void DrawContent(const EditorContext& ctx,
|
||
const std::filesystem::path& dir);
|
||
|
||
// 固定根(下标即身份):项目资产 / 场景文件
|
||
int m_Root = 0;
|
||
// 当前浏览目录(点目录树切换;内容区显示这里的条目)
|
||
std::filesystem::path m_CurrentDir;
|
||
// 类型过滤(0 = All;其余见 kTypeNames)
|
||
int m_TypeFilter = 0;
|
||
// 名字子串过滤(空 = 不过滤)
|
||
char m_NameFilter[64] = "";
|
||
// 视图模式 + 网格瓦片尺寸(像素)
|
||
ViewMode m_ViewMode = ViewMode::List;
|
||
float m_TileSize = 96.0f;
|
||
// 当前选中条目(资产相对路径;空 = 无选中)
|
||
std::string m_SelectedPath;
|
||
};
|
||
|
||
#endif //HELLOVULKAN_ASSETBROWSERPANEL_H
|