架构总览与核心设计
Alcedo Studio 是一款基于 C++20 与 Qt 6 QML / Qt Quick 构建的数字暗房应用,专为非破坏性 RAW 处理与资产管理设计。
系统分层架构
应用在架构上划分为清晰的四层设计:
┌────────────────────────────────────────────────────────────────────────┐
│ Qt 6 QML / Qt Quick 表现层 │
│ (TopToolbar, WorkspaceHost, LibraryWorkspace, EditorWorkspace, RHI) │
└───────────────────────────────────┬────────────────────────────────────┘
│ Q_PROPERTY / 信号槽绑定
┌───────────────────────────────────▼────────────────────────────────────┐
│ C++ 核心服务与所有者层 (Services) │
│ ├─ AlbumService: DuckDB 驱动的 Sleeve 元数据管理与资产查询 │
│ ├─ EditorSessionService: 工作文档、DAG 提交树投影与恢复日志 │
│ ├─ ExportService: 异步批处理渲染管线调度 │
│ └─ AutomationServer: 为 alcedo-cli 提供的本地 RPC 协同服务 │
└───────────────────────────────────┬────────────────────────────────────┘
│ 原生计算与着色器调用
┌───────────────────────────────────▼────────────────────────────────────┐
│ 跨平台 GPU 硬件加速管线 (GPU Pipeline) │
│ ├─ Windows: NVIDIA CUDA 原生核函数 (FP32 并行计算) │
│ ├─ macOS: Apple Silicon Metal 统一内存计算着色器 │
│ └─ 通用平台: OpenCL 1.2 标准管线 │
└───────────────────────────────────┬────────────────────────────────────┘
│ 底层库与基础设施
┌───────────────────────────────────▼────────────────────────────────────┐
│ 第三方引擎与基础设施 (Engines) │
│ ├─ LibRaw (RAW 传感器解码与解拜耳) │
│ ├─ DuckDB (嵌入式非破坏性关系型元数据存储) │
│ ├─ Lensfun (镜头与机身光学畸变校准数据库) │
│ └─ ONNX Runtime (端侧轻量化视觉模型推理引擎) │
└────────────────────────────────────────────────────────────────────────┘
核心子系统职责
1. 窗口与工作区路由(UI Shell & Navigation)
main.cpp在应用启动时完成硬件加速检测、DuckDB 存储挂载、QML 单例与类型注册,通过engine.loadFromModule("Alcedo.Main", "Main")加载主窗口。WorkspaceHost作为工作区路由器,在图库工作区(LibraryWorkspace)与编辑器工作区(EditorWorkspace)之间进行视图切换,并在离开编辑器前确保未持久化的调整事务完整归档。
2. Sleeve 数字资产管理系统(DuckDB Backend)
- 位于
album_backend模块。采用集中式数据库管理,将照片文件索引、EXIF 缓存、星级评分与虚拟集合统一存放在单个.alcd项目文件内,避免在照片目录生成分散的.xmp伴侣文件。 - 利用 DuckDB 列式存储与向量化查询执行,支持对拍摄日期、相机型号、镜头规格与星级评分进行多维条件筛选与分组。
3. 编辑会话与 DAG 提交树(EditorSessionService)
- 位于
editor_session模块。每个被编辑的照片都会映射为一个基于有向无环图(DAG)的提交图。 - 每次释放滑块都会生成一个原子提交(Commit),Version 则是指向特定提交节点的命名分支指针。
- 系统采用事务双写机制:滑块调整先追加记录至内存恢复日志以保证操作响应,随后在特定检查点异步持久化至 DuckDB 数据库,防止异常退出导致未保存的编辑丢失。
4. GPU 场景线性渲染管线(GPU Pipeline & RHI)
- 图像解码后,数据统一提升至 16 位浮点 / 32 位浮点的高动态范围场景线性空间(ACEScg)。
- 结合 Qt Quick RHI(Rendering Hardware Interface),计算管线直接将渲染完成的浮点纹理提交给场景图视口合成器,避免多余的主机内存回读,保证编辑过程中的流畅响应。
- 完整的显示渲染变换(ACES 2.0 / OpenDRT)运行在管线末端,完成到目标显示色彩空间的映射。
开发者如需从源码编译构建 Alcedo Studio,请继续查阅 从源码编译构建。