- App/editor: Hierarchy/Inspector/Viewport/Stats 四面板 + DockBuilder 默认布局,main.cpp 瘦身为场景搭建与生命周期 - 显示链: Tonemap→PresentTarget 经 ImGui::Image 呈现(零色偏),backbuffer 仅承载 ImGui;Direct/Viewport 双显示模式 + 面板分辨率上报 - 帧首同步 BeginFrameSync: resize/vsync/尺寸/模式意图统一帧首落定(修描述符悬垂);修复 vsync 意图未落 swapchain 导致的每帧重建交换链 - 输入: Editor 每帧判定键盘/鼠标归属(打字让位、Viewport hover/focus 放行、Fullscreen 全放行) - 材质: roughness 独立槽位 + 非 glTF 金属/粗糙贴图映射;透明队列 depthWrite=FALSE + translucent 独立 shader + scratch 清帧 - FBX: 非蒙皮网格烘焙节点链全局变换(Z-up 旋转/单位换算落顶点) - Hierarchy 行 ImGui ID 以 UUID 作用域(重名不冲突、改名不丢选中)
47 lines
1.7 KiB
C++
47 lines
1.7 KiB
C++
//
|
||
// Created by atdunbg on 2026/9/23.
|
||
//
|
||
// ImGuiPass:叠加层(loadOp=Load,不清屏)。
|
||
// 框架只负责把 draw data 录进 cmd;UI 内容全部由派生类在
|
||
// OnRenderOverlay() 里构建,框架自身不画任何 ImGui 控件。
|
||
// 未启用叠加层时空转(begin/end 一次空 rendering region)。
|
||
//
|
||
|
||
#ifndef HELLOVULKAN_IMGUIPASS_H
|
||
#define HELLOVULKAN_IMGUIPASS_H
|
||
|
||
#include <Engine/Renderer/Passes/RenderPass.h>
|
||
#include <Engine/Renderer/SceneTypes.h> // FrameSceneData(displayMode 帧契约)
|
||
|
||
namespace Engine {
|
||
|
||
class ImGuiLayer;
|
||
|
||
namespace Passes {
|
||
|
||
class ImGuiPass final : public RenderPass {
|
||
public:
|
||
// 二级指针:Renderer::SetImGuiLayer 在 Register 之后才可能被调
|
||
//(EnableImGui 时机由派生类决定),执行期解引用取最新值。
|
||
// presentTarget:ImGui::Image 采样的场景纹理(tonemap 输出)。
|
||
// loadOp 按 displayMode 分支:Direct = Load(blit 已铺场景),
|
||
// Viewport = Clear(唯一写入者,清"桌面底色")
|
||
ImGuiPass(ImGuiLayer** layer, FrameSceneData& frame,
|
||
RG::TextureHandle backbuffer, RG::TextureHandle presentTarget)
|
||
: m_Layer(layer), m_Frame(frame), m_Backbuffer(backbuffer),
|
||
m_PresentTarget(presentTarget) {}
|
||
|
||
void Register(RG::RenderGraph& rg) override;
|
||
|
||
private:
|
||
ImGuiLayer** m_Layer;
|
||
FrameSceneData& m_Frame; // displayMode(帧契约)
|
||
RG::TextureHandle m_Backbuffer;
|
||
RG::TextureHandle m_PresentTarget;
|
||
};
|
||
|
||
} // namespace Passes
|
||
} // namespace Engine
|
||
|
||
#endif //HELLOVULKAN_IMGUIPASS_H
|