风景秀丽的 2D 构图

  • 项目负责人:emircan@google.com
  • 文档作者:emircan@google.com, dworsham@google.com
  • 区域:视图系统

问题陈述

当前在 fuchsia.ui.gfx 命名空间(“gfx API”)下为图形客户端提供 3D API。该 API 可为客户端提供与视频游戏或其他 3D 图形程序中的场景模型类似的场景模型。绘制顺序由 Z 深度处理,不透明度通过基于深度的 alpha 混合来处理(组不透明度等功能不可行)。遗憾的是,无论是从产品和性能的角度来看,gfx API 都不再满足对“scape”的要求。

从产品的角度来看,我们当前客户基本上都是 2D 产品。不存在深度和绘制顺序的概念,绘制顺序只是提交不同批次绘制几何图形的顺序。由于没有深度,透明度效果也取决于绘制顺序,组不透明度等效果很常见。“2D”产品(通过 Flutter、Chromium 和会话框架)必须执行额外的操作,以解决 Views 的 3D 场景表示与用户体验的 2D 表示形式之间的阻抗不匹配问题。

从性能的角度来看,现代视频显示控制器 (VDC) 硬件提供了加速功能(例如多个显示平面和硬件叠加层),Sense 将来希望利用这些功能来降低功耗和 GPU 使用量。不过,硬件以严格 2D 范式运行,并且只理解可以放置在 X/Y 中的矩形图层。Views 当前的 3D API 允许并鼓励客户提交不符合此范例的内容,并阻碍了优化尝试。

解决方案声明

Flatland 2D API 是 Photos 团队目前正在开发的一种新的客户端 API,旨在通过向客户端提供类似于屏幕控制器的功能,以实现 Fuchsia 上图形的产品和性能目标。客户端只能提交按 X/Y 方向缩放和偏移的 2D 图层。

这会导致:

  • 公开展示更符合现有客户预期的真实 2D API。
  • 通过将工作委托给 VDC 尽可能减少 GPU 使用量。
  • 更轻量级的风景名胜,仅适用于 2D 矩形图层。

依赖项

转换所有现有 Views 客户端(树内和外部)

风险和缓解措施

风险:考虑到用户输入问题,产品中的所有客户端都必须以原子方式进行迁移

缓解措施:用于在 RootPresenter、Flutter 和 Chrome 中启用 Flatland 的配置数据标志,以确保 Flatland 的启用不中断且原子化

缓解措施:Sce 中更复杂的输入实现,允许客户端以非原子方式进行迁移(混合 gfx 和 Flatland 场景图)

缓解措施:最初不会实现组不透明度功能;保存以备后用