121 lines
2.8 KiB
Markdown
121 lines
2.8 KiB
Markdown
# Renderer模块 EditorViewport缺少RenderSurface接入层
|
||
|
||
## 1. 问题定义
|
||
|
||
当前 editor 已经有:
|
||
|
||
- `GameViewPanel`
|
||
- `SceneViewPanel`
|
||
|
||
但二者目前仍然是空面板,尚未形成真正的 viewport 渲染宿主。
|
||
|
||
这意味着 Renderer 即使在 runtime 侧建立起来,editor 侧也还没有标准方式去承接:
|
||
|
||
- 离屏 color/depth 输出
|
||
- viewport resize
|
||
- 渲染结果贴到 ImGui 面板
|
||
|
||
---
|
||
|
||
## 2. 当前现状
|
||
|
||
当前 `GameViewPanel::Render()` 与 `SceneViewPanel::Render()` 仅创建面板窗口,本身没有:
|
||
|
||
- 离屏渲染目标
|
||
- 渲染尺寸管理
|
||
- RHI / Renderer 级渲染输出对象
|
||
- 纹理到 ImGui 的桥接
|
||
|
||
也就是说,editor 当前只有“面板外壳”,还没有“渲染宿主层”。
|
||
|
||
---
|
||
|
||
## 3. 为什么这不应该反向污染 Renderer 设计
|
||
|
||
这个问题很容易走偏成下面这种错误路线:
|
||
|
||
- 先把 renderer 直接写进 editor 面板逻辑
|
||
- `SceneView` 一套渲染逻辑
|
||
- `GameView` 一套渲染逻辑
|
||
- runtime 又一套渲染逻辑
|
||
|
||
这会导致:
|
||
|
||
- 渲染逻辑重复
|
||
- editor 与 runtime 耦合
|
||
- 后续 C# SRP 难以统一接管
|
||
|
||
因此正确思路不是“先让面板自己画”,而是:
|
||
|
||
1. Renderer 模块先支持统一的 `RenderSurface`
|
||
2. editor viewport 只作为 `RenderSurface` 的宿主与展示层
|
||
|
||
---
|
||
|
||
## 4. 建议方案
|
||
|
||
### 4.1 先在 Renderer 模块建立 `RenderSurface`
|
||
|
||
`RenderSurface` 应统一描述:
|
||
|
||
- swapchain 输出
|
||
- 离屏 color / depth 目标
|
||
- viewport 尺寸
|
||
- resize 行为
|
||
|
||
### 4.2 editor 侧建立 viewport host 层
|
||
|
||
editor 侧后续应新增一层专门承接:
|
||
|
||
- 面板尺寸变化
|
||
- 请求 Renderer 重建或 resize `RenderSurface`
|
||
- 把结果纹理显示到 ImGui
|
||
|
||
而不是把渲染实现直接塞进面板类。
|
||
|
||
### 4.3 `SceneView` 与 `GameView` 应共享同一套 Renderer 输出机制
|
||
|
||
区别只在于:
|
||
|
||
- `GameView` 使用 runtime camera
|
||
- `SceneView` 使用 editor 自有 camera / gizmo / overlay
|
||
|
||
但底层渲染输出机制应一致。
|
||
|
||
---
|
||
|
||
## 5. 与未来 Unity 风格演进的关系
|
||
|
||
未来如果要做接近 Unity 的 editor 与 SRP 体系,这一层非常关键。
|
||
|
||
因为 Unity 的:
|
||
|
||
- Game 视图
|
||
- Scene 视图
|
||
- Camera 预览
|
||
|
||
本质上都不是复制多套渲染器,而是在同一渲染体系上挂不同宿主与附加绘制。
|
||
|
||
XCEngine 也应遵循同样思路。
|
||
|
||
---
|
||
|
||
## 6. 验收标准
|
||
|
||
完成后至少应满足:
|
||
|
||
1. Renderer 能输出到离屏 `RenderSurface`
|
||
2. `GameView` 能显示 renderer 的离屏结果
|
||
3. `SceneView` 能显示 renderer 的离屏结果
|
||
4. viewport resize 不需要复制新的渲染逻辑
|
||
5. runtime 与 editor 共用同一套渲染宿主接口
|
||
|
||
---
|
||
|
||
## 7. 优先级
|
||
|
||
中到高。
|
||
|
||
它不是 Renderer v0 的第一步实现内容,但必须在 renderer 基础链路稳定后尽快接上,否则 editor 渲染体系会被迫走临时方案。
|
||
|