feat: compose nested UI layouts with 2D and 3D scene viewports #5

Merged
Zayden-Jung merged 8 commits from codex/page-surfaces into main 2026-11-10 17:02:26 +00:00
Collaborator

问题与结果

页面方向、布局和世界相机原先混在 Page 模式中,画布输入也会受宿主区域和过时帧影响。本次将页面身份、有限排版、场景、视口与摄像机分开,普通 UI 可嵌入 2D / 3D 世界,世界视口也可继续嵌入普通 UI。

实际改动

  • Row / Column / Overlay 任意嵌套;主轴与交叉轴、alignSelf、margin / 非对称 border / padding、fixed / auto / fill 与 min/max、裁剪。保留共享 Block 和独立 Mount。
  • Scene2D / CanvasViewport / Camera2D、ScrollView;多视口、显式共享相机、固定覆盖 UI、平移缩放和逐层逆变换命中。默认页面已使用独立场景与视口,旧 Page.mode 保留兼容。
  • Scene3D / Group3D、不可变自定义网格 / Box3D、灯光和变换;Viewport3D、透视 / 正交摄像机、可替换 OrbitController、射线拾取。
  • Panel3D 世界空间 UI,真实布局、按钮回调、遮挡、2D / 3D 再次嵌套和独立出现尺寸。修复派生槽位哈希超出 signed integer 导致的偶发排版失败。
  • 3D BVH 与视锥剔除、不可变场景复用、2D 有界屏幕命中索引、嵌套像素 / 递归 / 绘制预算、文字可见裁剪与高倍字形 LOD。
  • 连续原生相机 / 滚动事件在有界队列出队时更新帧版本,保留捕获的会话和 Mount;离散动作和外部 HTTP 仍严格拒绝过时帧。多窗口共用权威输入客户端。
  • 宿主管理工具只有左侧栏,折叠后仅展开按钮和系统窗口三键;其余产品界面由 Endor 渲染。保留已合并的 workspace 示例。
  • 同步 README、架构/API 文档,以及盒模型、场景视口、3D 和世界 UI 示例。

验证

用户已授权本地工作,未恢复 CI/CD。

  • cargo test --locked:186 passed;后续等深度拾取修正的 7 项 scene3d 回归通过。
  • cargo fmt --check、cargo clippy --all-targets --locked -- -D warnings、差异空白检查和编辑器诊断通过。
  • release 原生 macOS 应用包构建成功;真实启动 Tessera.app,加载 world-ui 示例,截图确认倾斜 UI 面板、立方体与嵌套 Canvas。
  • 针对该运行实例的 HTTP 事件验证:世界 UI 按钮计数 0→1,摄像机旋转/缩放生效,旧帧重复请求返回 409,空闲版本采样一致。

限制

  • 3D 使用现有 CPU 软件渲染器;本次没有新增 GPU 后端。表面按预算降采样,高倍文字使用有界位图采样。
  • macOS 截图权限可用,但 CGPreflightPostEventAccess=false;集成自动操作工具因 OpenSSL 配置读取权限启动失败。因此未将 API/像素测试表述为硬件鼠标或触控板验收,原生应用保留供人工操作。
  • 原生输入队列有界,满时可拒绝新输入。固定 Aster 仍不支持普通数值算术表达式,自定义控制器可使用本次原生 translate / rotate 或字段赋值。未修改 Aster 子模块。

集成

base=main,head=codex/page-surfaces;main 已正常合入且是本分支祖先。依赖的 #4 已由用户合并。本次移除 WIP 状态,提交可评审版本,等待用户手动合并;bot 不合并、不直接推送 main。

详细接口和预算见 docs/scene-architecture.md。

## 问题与结果 页面方向、布局和世界相机原先混在 Page 模式中,画布输入也会受宿主区域和过时帧影响。本次将页面身份、有限排版、场景、视口与摄像机分开,普通 UI 可嵌入 2D / 3D 世界,世界视口也可继续嵌入普通 UI。 ## 实际改动 - Row / Column / Overlay 任意嵌套;主轴与交叉轴、alignSelf、margin / 非对称 border / padding、fixed / auto / fill 与 min/max、裁剪。保留共享 Block 和独立 Mount。 - Scene2D / CanvasViewport / Camera2D、ScrollView;多视口、显式共享相机、固定覆盖 UI、平移缩放和逐层逆变换命中。默认页面已使用独立场景与视口,旧 Page.mode 保留兼容。 - Scene3D / Group3D、不可变自定义网格 / Box3D、灯光和变换;Viewport3D、透视 / 正交摄像机、可替换 OrbitController、射线拾取。 - Panel3D 世界空间 UI,真实布局、按钮回调、遮挡、2D / 3D 再次嵌套和独立出现尺寸。修复派生槽位哈希超出 signed integer 导致的偶发排版失败。 - 3D BVH 与视锥剔除、不可变场景复用、2D 有界屏幕命中索引、嵌套像素 / 递归 / 绘制预算、文字可见裁剪与高倍字形 LOD。 - 连续原生相机 / 滚动事件在有界队列出队时更新帧版本,保留捕获的会话和 Mount;离散动作和外部 HTTP 仍严格拒绝过时帧。多窗口共用权威输入客户端。 - 宿主管理工具只有左侧栏,折叠后仅展开按钮和系统窗口三键;其余产品界面由 Endor 渲染。保留已合并的 workspace 示例。 - 同步 README、架构/API 文档,以及盒模型、场景视口、3D 和世界 UI 示例。 ## 验证 用户已授权本地工作,未恢复 CI/CD。 - cargo test --locked:186 passed;后续等深度拾取修正的 7 项 scene3d 回归通过。 - cargo fmt --check、cargo clippy --all-targets --locked -- -D warnings、差异空白检查和编辑器诊断通过。 - release 原生 macOS 应用包构建成功;真实启动 Tessera.app,加载 world-ui 示例,截图确认倾斜 UI 面板、立方体与嵌套 Canvas。 - 针对该运行实例的 HTTP 事件验证:世界 UI 按钮计数 0→1,摄像机旋转/缩放生效,旧帧重复请求返回 409,空闲版本采样一致。 ## 限制 - 3D 使用现有 CPU 软件渲染器;本次没有新增 GPU 后端。表面按预算降采样,高倍文字使用有界位图采样。 - macOS 截图权限可用,但 CGPreflightPostEventAccess=false;集成自动操作工具因 OpenSSL 配置读取权限启动失败。因此未将 API/像素测试表述为硬件鼠标或触控板验收,原生应用保留供人工操作。 - 原生输入队列有界,满时可拒绝新输入。固定 Aster 仍不支持普通数值算术表达式,自定义控制器可使用本次原生 translate / rotate 或字段赋值。未修改 Aster 子模块。 ## 集成 base=main,head=codex/page-surfaces;main 已正常合入且是本分支祖先。依赖的 #4 已由用户合并。本次移除 WIP 状态,提交可评审版本,等待用户手动合并;bot 不合并、不直接推送 main。 详细接口和预算见 docs/scene-architecture.md。
codex-bot changed title from WIP: feat: page surfaces and collapsible sidebar to WIP: feat: nested layout and unified scene viewports 2026-11-10 14:17:59 +00:00
codex-bot changed target branch from codex/local-development to main 2026-11-10 14:17:59 +00:00
codex-bot added 3 commits 2026-11-10 14:17:59 +00:00
codex-bot added 1 commit 2026-11-10 14:43:02 +00:00
codex-bot added 1 commit 2026-11-10 15:19:30 +00:00
codex-bot added 1 commit 2026-11-10 16:08:28 +00:00
codex-bot added 1 commit 2026-11-10 16:53:41 +00:00
codex-bot changed title from WIP: feat: nested layout and unified scene viewports to feat: compose nested UI layouts with 2D and 3D scene viewports 2026-11-10 16:54:33 +00:00
codex-bot added 1 commit 2026-11-10 16:55:40 +00:00
Zayden-Jung merged commit 4c3fc8b5dd into main 2026-11-10 17:02:26 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Zayden-Jung/endorphin-tessera-gui#5