游戏引擎从零开始(12)-docking&多窗口

做一个好看的窗口

imGui有个docking分支,支持docking和多窗口功能。本节只有几行代码修改,读者可以直接参考commit修改,不逐行解释了.

docking

docking功能指的是拖动窗口,四边会出现一组响应区域,鼠标拖动子窗口到对应热区,会对齐到该边上。

多窗口

多窗口指的是整个应用可以有多个独立的窗口,即子窗口可以从主窗口中拖出去.

docking&多窗口实现

切换分支

docking和多窗口需要特定的imGui分支,进入Sandbox/Hazel/vendor/imgui目录,切花到docking分支

复制代码
git checkout docking

如果你不能科学上网,可以手动下载imGui的 docking分支代码

修改imGui初始化的代码

c++ 复制代码
void ImGuiLayer::OnAttach() {
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImGui::StyleColorsDark();
    ImGuiIO& io = ImGui::GetIO(); (void)io;


    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;
    io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;

    io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

最重要的就是这两行,打开docking和viewports

c++ 复制代码
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;           // Enable Docking
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;

上一节中的代码实现的有点问题ImGuiIO& io = ImGui::GetIO(); io变量的声明少了个&,效果就不对,c++语言真是容易出错。
如果第一次运行出来的效果有问题,考虑删除项目运行目录下的"imgui.ini 文件",该文件会实时记录程序的数据

打开dockspace

程序运行起来,从examples中打开Dockspace,使docking和多窗口生效

本节对应的代码还做了多处调整,使整体结构更为合理。读者可参考commit对比。

完整代码参考 docking&viewports

相关推荐
chenbingjie_c4 小时前
C++ 进阶核心知识点总结:模板、内存分区、new/delete、内存池
开发语言·c++
Frank_refuel6 小时前
【C++】Json库介绍和使用
c++
重生之小比特6 小时前
【C++进阶】map和set
java·开发语言·c++
知识分享小能手7 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼8 小时前
linux 进程信号(上)
linux·c++·算法
海上小飞龙9 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Persistent的粽子!9 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
小小龙学IT9 小时前
三菱 PLC MC 协议(SLMP / QnA 兼容 3E 帧)深度解析:从帧结构到 C++/Go 双语言采集实战
c语言·c++·golang
程序猿编码10 小时前
C++/CUDA 手写 LLM 推理引擎:拆解 vLLM 核心 PagedAttention 与连续批处理
开发语言·c++·深度学习·神经网络·推理·vllm
hold?fish:palm10 小时前
44 二叉搜索树中第K小的元素
开发语言·c++·算法