From 61d2378ae28e7a0edc1be622e16dce58e6b88b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Sat, 3 Oct 2026 23:14:27 -0400 Subject: [PATCH] =?UTF-8?q?Tasks=20=C2=B7=20T50a:=20chapter=2044=20Renderi?= =?UTF-8?q?ng,=20RenderSurface=20planned,=20what=20gpui=20can=20and=20cann?= =?UTF-8?q?ot=20host?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TASKS.md | 9 ++++++++- gpui-components.md | 11 +++++++++++ tasks/ch44.md | 13 +++++++++++++ tasks/reviews.md | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tasks/ch44.md diff --git a/TASKS.md b/TASKS.md index 4976d4f..3e980ce 100644 --- a/TASKS.md +++ b/TASKS.md @@ -1,7 +1,7 @@ # Tasks Progress truth. Work runs top to bottom. No item is skipped. -Each `T` item ends with a review in a herdr split pane, three rounds at most: codex (`gpt-6-astra`, effort `max`) through T24d round 2; from T24d round 3, after codex ran out of quota on 2026-09-26, a Claude session on Fable 5.1 at max effort, at the user's word; from T44a round 2, codex again, as the user asked; from T45d round 2, Claude Code on Fable 5.1 at high effort, at the user's word. +Each `T` item ends with a review in a herdr split pane, three rounds at most: codex (`gpt-6-astra`, effort `max`) through T24d round 2; from T24d round 3, after codex ran out of quota on 2026-09-26, a Claude session on Fable 5.1 at max effort, at the user's word; from T44a round 2, codex again, as the user asked; from T45d round 2, Claude Code on Fable 5.1 at high effort, at the user's word; from T50a, codex `gpt-6.1-sol` at `max`, at the user's word. Per-component lines live in `tasks/`. Tags there: @@ -178,6 +178,13 @@ Per-component lines live in `tasks/`. Tags there: - [x] T48l Docs · Testing: the `test-support` feature, frames, clocks and reduced motion in tests - [x] T48m Docs · E2E: the Docs routes, rail, list, previous and next, and code blocks under Playwright - [ ] T49 Acceptance: live URL and MVP checklist +- [x] T50a Rendering · Plan: chapter 44 in the PRD, `tasks/ch44.md`, these lines +- [ ] T50b Rendering · Surface: `rendering::RenderSurface`, tested — `tasks/ch44.md` +- [ ] T50c Rendering · Gallery: a Rendering page, its story, `stories.json`; the gallery runs on Linux +- [ ] T50d Rendering · Web: the story runs live on the site from the wasm gallery, checked in a browser +- [ ] T50e Rendering · Platforms: CI builds and tests the crate on Linux, macOS and Windows, arm64 and x86_64 +- [ ] T50f Rendering · Docs: a guide with an example `scripts/check.sh` compiles; AGENTS.md +- [ ] T50g Rendering · Acceptance: the checklist, item by item ## T00 detail diff --git a/gpui-components.md b/gpui-components.md index bdf14dd..16e8053 100644 --- a/gpui-components.md +++ b/gpui-components.md @@ -1418,3 +1418,14 @@ - IconBrowser - A11yChecker - ScreenshotTest Harness + +--- + +## 44. 渲染表面(Rendering) + +- RenderSurface — 宿主按盒子的设备像素绘出帧 +- FramebufferView / OffscreenRenderSurface / CustomRendererSurface / TextureView → RenderSurface +- ShaderView / GpuSurface / WebGPUSurface / Compute Visualization / GPU Particle View — 宿主自带 GPU,读回帧交给 RenderSurface +- CameraTexture / GStreamerTexture / ExternalTexture — 宿主的帧交给 RenderSurface +- ZeroCopyTexture / SharedTextureView / MetalSurface / OpenGLSurface / VulkanSurface / D3D11/D3D12Surface — gpui 不共享设备 +- 3D Scene / 3D Viewport → media::ModelViewer diff --git a/tasks/ch44.md b/tasks/ch44.md new file mode 100644 index 0000000..4296ef7 --- /dev/null +++ b/tasks/ch44.md @@ -0,0 +1,13 @@ +# Chapter 44 + +## T50b Rendering · Surface — `src/rendering` + +gpui at 1a28cff paints pixels three ways: `RenderImage` through `paint_image` on every platform and the web; `CVPixelBuffer` through `paint_surface`, NV12 on macOS alone, dropped by the wgpu and DirectX renderers; a native view over the window. It shares no device and runs no outside shader. + +- [ ] RenderSurface — the host draws a frame at the box's size in device pixels; a new size or revision draws again; the old frame leaves the atlas +- [x] FramebufferView / OffscreenRenderSurface / CustomRendererSurface / TextureView → `rendering::RenderSurface` +- [ ] ShaderView / GpuSurface / WebGPUSurface / Compute Visualization / GPU Particle View — `host`: the host renders on its own device and reads back into `rendering::RenderSurface` +- [ ] CameraTexture / GStreamerTexture / ExternalTexture — `host`: the host's frames reach `rendering::RenderSurface` +- [ ] ZeroCopyTexture / SharedTextureView — `blocked`: only macOS's Metal renderer draws `paint_surface`, NV12 alone +- [ ] MetalSurface / OpenGLSurface / VulkanSurface / D3D11/D3D12Surface — `blocked`: gpui shares no device; a host renders offscreen and feeds `rendering::RenderSurface` +- [x] 3D Scene / 3D Viewport → `media::ModelViewer` diff --git a/tasks/reviews.md b/tasks/reviews.md index ca278d4..ffd3f8f 100644 --- a/tasks/reviews.md +++ b/tasks/reviews.md @@ -351,3 +351,4 @@ | G2 | 1 | PASS | | | G3 | 1 | FAIL | RangeSlider thumbs reported the whole track, not the bounds the other thumb leaves | | G3 | 2 | PASS | | +| T50a | 1 | PASS | codex gpt-6.1-sol max |