feat(web): enable UV editing in web UI and use OPFS save/reopen
- Forward workspace and mode to the native context in ?ui=web. - Locate the writable native UV area; enter Edit explicitly and wait for project recovery locks before switching mode. - Save projects to OPFS by default; add an explicit manual .blend download. - Add UV E2E coverage and implementation status. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
66
docs/status/WEB_BLENDER_FULL_COURSE_20261113.md
Normal file
66
docs/status/WEB_BLENDER_FULL_COURSE_20261113.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Web Blender 全站功能补齐与入门课程 — 实施进度
|
||||
|
||||
日期:2026-11-13
|
||||
状态:**进行中(UV + OPFS 保存检查点完成;四块编辑器其余三块待实现)**
|
||||
|
||||
## 本轮铁律
|
||||
|
||||
- **OPFS 优先(用户指令):** 平台保存、重开、恢复、课程录制与自动测试全部使用 OPFS;
|
||||
下载到本地必须由用户手动触发独立入口(顶栏“下载 .blend”、文件 → 下载 .blend 到本地)。
|
||||
禁止在保存/编辑流程中自动下载。
|
||||
- **桌面源码为准:** Web 侧行为先查 `blender-5.2.0/source/blender/`。UV 编辑要求
|
||||
`ob->mode & OB_MODE_EDIT` 且 `sima->mode == SI_MODE_UV`(`editors/space_image/space_image.cc:407`),
|
||||
`UV` 操作 poll 使用 `ED_operator_uvedit`(`image_ops.cc:1079`)。因此课程与测试显式进入 Edit,
|
||||
不把“自动进入 Edit”当作验收前提。
|
||||
|
||||
## 已完成
|
||||
|
||||
### 1. UV Editing 在 `?ui=web` 可操作
|
||||
|
||||
- `App.tsx` 的 `dispatchUI` 在 web 模式转发 `switchWorkspace`/`setMode` 到原生上下文;
|
||||
`selectNativeWorkspace` 先切 UI、再后台同步原生,等待工程恢复锁最多 30 秒。
|
||||
- UV 工作区确定性定位 `UV_IMAGE:UV` 区域;自动进入 Edit(便利),失败时可用模式菜单显式进入。
|
||||
- `changeNativeMode` 等待恢复/保存等工程锁与 `headerPending/nativeBusy` 后切换。
|
||||
- `recoverCachedProject` 取消启动 General 模板,避免 OPFS 恢复被覆盖。
|
||||
- 验证:
|
||||
`DISPLAY=:1 CHROME_PATH=/usr/bin/google-chrome GPU_MODE=hardware npx playwright test --config playwright.config.ts tests/e2e/web-uv-workspace-gate.spec.ts --workers=1`
|
||||
→ **2/2 PASS(35.9s)**:
|
||||
- UV 工作区找到可写原生 UV 区域,全选→展开提交(revision 增长);
|
||||
- 保存到 OPFS → reload → 最近项目恢复 → UV 控件与原生 UV 选择仍在。
|
||||
- 测试入口:`/home/mes123456/workinf_Blender_Wasm/web/tests/e2e/web-uv-workspace-gate.spec.ts`。
|
||||
- 说明:Playwright 坐标点击会被原生画布/工具栏命中拦截,测试对工作区标签与 UV 按钮使用 DOM
|
||||
`click()`;产品按钮本身可见可点。
|
||||
|
||||
### 2. OPFS 保存与手动下载拆分
|
||||
|
||||
- 主保存(顶栏“保存项目”、Ctrl+S、文件 → 保存到浏览器 OPFS、教程/机器人保存)只写 OPFS,
|
||||
不再自动下载。
|
||||
- 新增显式手动入口:顶栏“下载 .blend”(`aria-label="下载 .blend"`)、
|
||||
文件 → 下载 .blend 到本地、F3 “Download Blend File to Local”。
|
||||
- 另存为写 OPFS;保存副本保留为手动下载副本。
|
||||
- 未验证:既有历史 spec 中仍以“保存项目 + waitForEvent('download')”取本地 .blend 的用例需要
|
||||
迁移到新的手动下载入口;本轮未批量改。
|
||||
|
||||
### 3. 规则落盘
|
||||
|
||||
- `AGENTS.md` 移植铁律已加入“OPFS 优先”条目。
|
||||
|
||||
## 待实现(按计划顺序)
|
||||
|
||||
1. **Texture Paint 最小 2D 画笔**:图像选择、颜色/大小/强度、光标、笔画、`packImage` 一次提交、
|
||||
undo/redo、OPFS 保存重开;无 WASM。桌面语义参考 `editors/sculpt_paint/mesh/paint_image*.cc`。
|
||||
2. **Geometry Nodes 画布**:共享图状态、React Flow 画布、位置/rename/属性、结果面板;
|
||||
需要一次 WASM 重建(location/properties)。
|
||||
3. **Spreadsheet 交互式只读表**:数据源/过滤/行列/列重排/CSV;原生属性值读取需 WASM。
|
||||
4. **Compositor 节点画布**:协议+React Flow+执行/Viewer;原生 writer/reader 缺失,需要最大的一次
|
||||
WASM 工作。
|
||||
5. 其余缺口:Area 编辑器选择/⋮、Camera Perspective、Preferences、Outliner、Graph Editor。
|
||||
6. 15 模块课程、15 个短视频、OPFS 保存重开流程、增量发布到 `https://49.232.250.35:58014/`。
|
||||
|
||||
## 已知限制 / 未验证
|
||||
|
||||
- 纹理绘制、Compositor 画布、GN 画布、Spreadsheet 尚未实现;课程/视频尚未开始。
|
||||
- 本轮只验证 Chromium + RTX 4060;未验证其他浏览器。
|
||||
- 既有保存下载型 spec 尚未迁移;在迁移完成前不要把这些旧 spec 的失败当作产品回归。
|
||||
- 远端首次 wasm 加载 154–193 秒;课程录制只做本地,页面需提示首载时间。
|
||||
- 不宣称整体 Blender parity 或用户验收通过。
|
||||
Reference in New Issue
Block a user