2.8 KiB
2.8 KiB
Renderer模块 EditorViewport缺少RenderSurface接入层
1. 问题定义
当前 editor 已经有:
GameViewPanelSceneViewPanel
但二者目前仍然是空面板,尚未形成真正的 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 难以统一接管
因此正确思路不是“先让面板自己画”,而是:
- Renderer 模块先支持统一的
RenderSurface - 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 cameraSceneView使用 editor 自有 camera / gizmo / overlay
但底层渲染输出机制应一致。
5. 与未来 Unity 风格演进的关系
未来如果要做接近 Unity 的 editor 与 SRP 体系,这一层非常关键。
因为 Unity 的:
- Game 视图
- Scene 视图
- Camera 预览
本质上都不是复制多套渲染器,而是在同一渲染体系上挂不同宿主与附加绘制。
XCEngine 也应遵循同样思路。
6. 验收标准
完成后至少应满足:
- Renderer 能输出到离屏
RenderSurface GameView能显示 renderer 的离屏结果SceneView能显示 renderer 的离屏结果- viewport resize 不需要复制新的渲染逻辑
- runtime 与 editor 共用同一套渲染宿主接口
7. 优先级
中到高。
它不是 Renderer v0 的第一步实现内容,但必须在 renderer 基础链路稳定后尽快接上,否则 editor 渲染体系会被迫走临时方案。